2

DrawString()panel()のメソッドを使用して文字列を描画しようとしていますpanel1Form1form( )がロードされたときにこれが発生するようにします。しかし、それは起こりません。しかし、のクリックイベントハンドラーで同じコード(以下に示す)を使用すると、文字列が描画されます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

投稿したコードは1回だけ実行されます。フォームの再描画がトリガーされると(別のフォームを取得するなど)、フォームは消えます。ボタンクリックイベントのメソッドについても同じことが言えます。

パネルに描画する方法は次のとおりです。

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 に答える