代码之家  ›  专栏  ›  技术社区  ›  WildCrustacean

在窗体构造函数中的面板上绘制

  •  2
  • WildCrustacean  · 技术社区  · 14 年前

    我有以下示例代码,我希望在加载后立即将窗体上的面板涂成红色:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
            drawstuff();
        }
    
        public void drawstuff()
        {
            using (Graphics g = panel1.CreateGraphics())
            {
                g.Clear(Color.Red);
            }
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            drawstuff();
        }
    }
    

    但是,由于某种原因,当我调用我的 drawstuff() 像这样的构造函数的函数。当我按下按钮打电话时 拖拽() 它工作得很好。

    有人能解释一下这里发生了什么吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Henk Holterman    14 年前

    这里发生了什么?

    你比正常的涂改/绘画要先进。当窗体显示时(第一次),它将被绘制并擦除。

    您可以尝试formCreate事件(我不完全确定),但将其放入显示的事件中肯定会起作用。

    但请注意,当最小化/还原或单击前面的其他窗口时,drawStuff()的结果将消失。

    考虑使用状态标志(dodrawstuff())并在panel1_paint事件中进行实际绘制。

        2
  •  1
  •   pmcilreavy    14 年前

    可能更容易创建您自己的自定义面板并覆盖onpaint…

    public class MyCustomPanel : Panel
    {
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
    
            e.Graphics.Clear(Color.Red);
        }
    }