我有以下示例代码,我希望在加载后立即为红色表单上的面板着色:
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()
函数时,它不会在面板上绘制。当我按下按钮拨打drawstuff()
时,它可以正常工作。
有谁可以解释这里发生的事情?
答案 0 :(得分:4)
这里发生了什么?
你领先于表格的正常擦除/绘画。当表格显示时(第一次),它被绘制然后被删除。
您可以尝试使用FormCreate事件(我不完全确定),但将其置于Shown事件中肯定会有效。
但请注意,当您最小化/恢复或单击前面的其他窗口时,DrawStuff()的结果将消失。
考虑使用状态标志(DoDrawStuff())并在panel1_Paint事件中进行实际绘制。
答案 1 :(得分:1)
可能更容易创建自己的自定义面板并覆盖OnPaint ...
public class MyCustomPanel : Panel
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.Clear(Color.Red);
}
}