我尝试在按下按钮时调用PaintEventArgs,问题是我不知道如何在不修改按钮事件的情况下调用按钮
private void button_Click(object sender, EventArgs e /*<= PaintEventArgs*/) { func(e); base.OnPaint(e); }
t1rydlwq1#
您可以调用Invalidate()它将导致控件被重绘
private void button_Click(object sender, EventArgs e /*<= PaintEventArgs*/) { //func(e); It will be called in the OnPaint method Invalidate(); }
要使用PaintEventArgs,您需要覆盖OnPaint方法
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); func(e); }
要实现OnPaint,您需要创建自己的类来继承Button
public class BetterButton : Button{ public BetterButton() {} protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); func(e); } }
mbzjlibv2#
您总是在要绘制的控件的Paint事件上进行绘制。这可能意味着在被重写的OnPaint方法中或在Paint事件处理程序中。为了引发Paint事件,您调用了相应控件的Invalidate方法。您可以不带参数调用它,但在理想情况下,您将计算已经或可能已经更改的最小区域并将其作为Rectangle或类似值传递。编辑:下面的示例将在表单的左上角绘制上次记录的时间,并在每次单击Button时更新该时间:
Paint
OnPaint
Invalidate
Rectangle
Button
private DateTime time; private void button1_Click(object sender, EventArgs e) { time = DateTime.Now; Invalidate(); } private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawString(time.ToString(), Font, Brushes.Black, 10, 10); }
如您所见,您需要在Click事件上做的就是更新数据并使表单无效。所有绘图(包括PaintEventArgs)都在Paint事件处理程序中处理。
Click
PaintEventArgs
2条答案
按热度按时间t1rydlwq1#
您可以调用Invalidate()它将导致控件被重绘
要使用PaintEventArgs,您需要覆盖OnPaint方法
要实现OnPaint,您需要创建自己的类来继承Button
mbzjlibv2#
您总是在要绘制的控件的
Paint
事件上进行绘制。这可能意味着在被重写的OnPaint
方法中或在Paint
事件处理程序中。为了引发Paint
事件,您调用了相应控件的Invalidate
方法。您可以不带参数调用它,但在理想情况下,您将计算已经或可能已经更改的最小区域并将其作为Rectangle
或类似值传递。编辑:
下面的示例将在表单的左上角绘制上次记录的时间,并在每次单击
Button
时更新该时间:如您所见,您需要在
Click
事件上做的就是更新数据并使表单无效。所有绘图(包括PaintEventArgs
)都在Paint
事件处理程序中处理。