2

我正在尝试使用DrawString()面板(panel1)上的方法绘制字符串。Form1我希望在 form( ) 加载时发生这种情况。但这不会发生。但是如果我在 click 事件处理程序中使用相同的代码(如下所示),则字符串被绘制出来panel1。我在哪里做错了?

    private void Form1_Load(object sender, EventArgs e)
    {

        /*string rand = getRandomString();
        textBox1.Text = rand;*/
        string rand = "Hello";
        SolidBrush sbr = new SolidBrush(Color.Black);
        Graphics g = panel1.CreateGraphics();
        FontFamily fam = new FontFamily("Magneto");
        Font font = new System.Drawing.Font(fam, 24, FontStyle.Bold);
        g.DrawString(rand, font, sbr, new Point(20, 20));
    }   
4

2 回答 2

5

您发布的代码仅执行一次 - 当表单触发重绘时(例如在其上获取另一个表单等),它将消失。按钮单击事件中的方法也是如此。

在面板上绘制的方法如下:

private void Panel1_Paint(object sender, PaintEventArgs e)
{

    var g = e.Graphics;
    /*string rand = getRandomString();
    textBox1.Text = rand;*/
    string rand = "Hello";
    using (var sbr = new SolidBrush(Color.Black))
    { 
        FontFamily fam = new FontFamily("Magneto");
        Font font = new System.Drawing.Font(fam, 24, FontStyle.Bold);
        g.DrawString(rand, font, sbr, new Point(20, 20));
    }

} 

每次需要重绘时都会触发控件的绘制事件,因此无论您绘制什么都不会意外消失。

于 2012-09-21T09:44:31.693 回答
4

此事件发生在窗体显示之前。因此,在您在面板上绘制文本后,面板会重新绘制并且您的更改会丢失。

如果重新绘制表单,即使在事件期间稍后绘制的文本Click也会消失,因此您需要处理 Panel 控件的Paint事件并在那里进行绘制。

于 2012-09-21T09:47:17.780 回答