1
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 的方法没有被调用?
你能指出我的错误吗?

4

1 回答 1

3

你所做的应该有效,但微软说你应该重写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事件......但微软说你应该重写OnPaint()来做你的绘画(也许是因为你有一个问题)。

于 2013-06-30T18:39:59.623 回答