VS C#在事件click中创建paint方法无反应?

在事件中使用paint重绘方法,不能成功,为啥呢😂
private void button1_Click(object sender, EventArgs e)
{

        label1.Paint +=  MyPaintHandler;


    }
    public void MyPaintHandler(object sender, PaintEventArgs e)
    {
        int i = 0;
        i = 2;
        i = 3;

    }

在这段代码中,虽然已经将MyPaintHandler方法绑定到label1的Paint事件上,但是在MyPaintHandler方法中并没有进行任何绘制操作,而只是简单地对一个变量进行了赋值操作。因此,重绘操作并不会触发。

如果想要在Paint事件中使用PaintEventArgs参数进行绘制操作,可以在MyPaintHandler方法中使用Graphics对象进行绘制。例如,可以使用以下代码:
望采纳🥰🥰🥰



private void button1_Click(object sender, EventArgs e)
{
    label1.Paint += MyPaintHandler;
}

public void MyPaintHandler(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Pen pen = new Pen(Color.Red, 2);
    g.DrawLine(pen, 0, 0, 100, 100);
}

上述代码中,首先将MyPaintHandler方法绑定到label1的Paint事件上。在MyPaintHandler方法中,通过PaintEventArgs参数获取到Graphics对象,然后创建一个Pen对象,并使用Graphics对象的DrawLine方法进行绘制。这样,当label1重绘时,就会触发MyPaintHandler方法进行绘制操作。

这就好比你在代码里动态的给button注册了一个click事件,但是要等到button按下的时候事件函数才会执行
重绘事件也一样
什么时候注册是你的权利
什么时候执行不是代码控制的,要看具体的操作

你可以用对label1的任意修改来触发它的paint事件,参考下面的代码。

        private void Form1_Load(object sender, EventArgs e) {
            label1.Paint += MyPaintHandler;
        }

        private void button1_Click(object sender, EventArgs e) {
            label1.Text = "OK";
        }
        public void MyPaintHandler(object sender, PaintEventArgs e) {
            int i = 0;
            i = 2;
            i = 3;
            Console.WriteLine(i);

        }

本人新手,想实现能自由控制paint事件的触发,比如在单击事件后才执行paint事件。现找到一个好办法可以执行了,感谢各位的回答,给予了我很大帮助。使用了this.Refresh()方法来强制绘制,能正常触发事件了

private void button3_Click(object sender, EventArgs e)
        {
            NTC_Label1.Paint += Mypaints.label_Paint_Red;
            this.NTC_Label1.Refresh();
            NTC_Label2.Paint += Mypaints.label_Paint_Red;
            this.NTC_Label2.Refresh();
        }