调用 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,不叫?
你能指出我的错误吗?

调用 refresh() 方法时不调用 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()来画画(也许是因为你遇到的问题(。