调用 refresh() 方法时不调用 paint 事件委托
本文关键字:调用 paint 事件 refresh 方法 | 更新日期: 2023-09-27 18:20:32
class MainWindow : Form
{
public MainWindow()
{
InitializeComponent();
// Handlers
Paint += new PaintEventHandler(MainWindow_Paint);
MouseClick += new MouseEventHandler(MainWindow_MouseClick);
}
void MainWindow_MouseClick(object sender, MouseEventArgs e)
{
var p = new Point(e.X, e.Y);
m_ListOfFigures.ToArray()[0].addPoint(ref p);
Refresh();
}
void MainWindow_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
}
我不知道为什么我的方法,注册wm_paint,不叫?
你能指出我的错误吗?
您所做的应该有效,但Microsoft说您应该重写OnPaint()
而不是订阅 Paint
事件来绘制用户控件。
正如它在Control.Paint
文档中所说:
When creating a new custom control or an inherited control with a different visual appearance, you must provide code to render the control by overriding the OnPaint method.
有关更多详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/cksxshce.aspx
但请注意,这并不真正适用于表单类(例如您正在使用的类(,它们不是用户控件或自定义控件!尽管如此,重写 OnPaint(( 来绘制控件本身仍然更常见。
您应该尝试将以下内容添加到表单中:
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
// Now draw stuff using e.Graphics
}
Paint
事件实际上并不适合用户控件或窗体本身使用。相反,它适用于您希望在重新绘制包含控件中的控件时收到通知的情况。
注意 但是,话虽如此,它仍然应该使用 Paint
事件工作......但是Microsoft说你应该覆盖OnPaint()
来画画(也许是因为你遇到的问题(。