5

サイトで同様の質問をいくつか見ましたが、どれも本当に役に立ちませんでした。

ユーザーがいくつかのテキストボックスに入力した値に応じて形状が異なるボタンをクリックすると、フォームに数行を描画する関数があります。

私の問題は、フォームを最小化すると線が消え、OnPaint イベントを使用してこれを解決できることを理解しましたが、その方法がよくわかりません。

OnPaint イベントを使用して、ボタンを押すだけで何かを描画する関数を使用する簡単な例を教えてください。

4

2 に答える 2

6

では、ユーザー描画コントロールに関する MSDN チュートリアルを簡単に説明します

クラスを継承Buttonし、OnPaint メソッドをオーバーライドする必要があります。

コード例:

protected override void OnPaint(PaintEventArgs pe)
{
   // Call the OnPaint method of the base class.
   base.OnPaint(pe);

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);

   // Draw an aqua rectangle in the rectangle represented by the control.
   pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location, 
      this.Size));
}

編集:

プロパティをクラスに追加し、メソッドpublic Color MyFancyTextColor {get;set;}で使用しますOnPaint。また、ビジュアル スタジオ フォーム デザイナーのコントロール プロパティ エディターにも表示されます。

于 2012-04-09T16:14:45.060 に答える
3

Paintイベントが発生したときに呼び出されるメソッドに、シーンの (再) 描画を担当するすべてのコードを記述できます。

したがって、ペイントが次のように発生したときに呼び出されるメソッドを登録できます。

this.Paint += new PaintEventHandler(YourMethod);

次に、フォームの再描画が必要になるたびに YourMethod が呼び出されます。

また、この場合、メソッドにはデリゲートと同じ引数が必要であることも忘れないでください。

void YourMethod(object sender, PaintEventArgs pea)
{
   // Draw nice Sun and detailed grass
   pea.Graphics.DrawLine(/* here you go */);
}

編集

または、別の回答で述べたように、OnPaintメソッドをオーバーライドできます。そうすれば、独自のメソッドでイベント ハンドラーを追加することに注意する必要はありません。

于 2012-04-09T16:22:28.687 に答える