如何在使用panel. bringtofront()方法调用时禁用面板的绘制事件

本文关键字:调用 绘制 事件 panel bringtofront 方法 | 更新日期: 2023-09-27 18:08:03

我有两个面板堆叠在Form中,当一个panel1显示时,panel2在背景中,如果我使用BringToFront()方法调用panel2来查看panel2, panel2的油漆事件正在调用。所以我想防止Panel2调用Paint Event来禁用面板重绘

如何在使用panel. bringtofront()方法调用时禁用面板的绘制事件

我认为油漆方法是一个默认的事件,有任何关于"显示",嗯,你有没有试过做一个解决方案,如创建一个单独的静态标志,以防止你的油漆事件?

(这只是一个变通)

示例:

public bool displayed {get; set;}
private void Form1_Load(object sender, EventArgs e)
{
   displayed = false;
}    
private void Panel1_Paint(object sender, PaintEventArgs e)
{
    if(!displayed) {
         // do paint functions
         displayed = true;
    }
}

编辑:请试试这个

        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(
                new Pen(Color.Green, 3),
                new Rectangle(10, 10, 50, 50));
            //Drawing an ellipse
            e.Graphics.FillEllipse(Brushes.Green, new Rectangle(60, 60, 100, 100));
            //Drawing text
            e.Graphics.DrawString("Text", new Font("Verdana", 14), new SolidBrush(Color.Green), 200, 200);
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel2.Visible = false;
        }
        private void button2_Click_1(object sender, EventArgs e)
        {
            panel1.Visible = false;
            panel2.Visible = true;
        }
        // code described below
        public class MyDisplay : Panel
        {
            public MyDisplay()
            {
                this.DoubleBuffered = true;
            }
        }            

如本文所述,获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其表面以减少或防止闪烁。无论SendToBack() BringToFront()或Visible set.