2

ユーザーコントロールを含むWindowsフォームがあります。このユーザーコントロールのコードは次のとおりです。

protected override void OnPaint(PaintEventArgs pe)
{
  base.OnPaint(pe);
  pe.Graphics.DrawRectangle(
       new Pen(Color.Red, 5 + laenge), 
       new Rectangle(
             new Point(50 + leerzeichen, hoehe), 
             new Size(laenge + 20, 20)));
}

そして、もう少しコードがありますが、これはおそらく今は重要ではありません。したがって、プログラムを開始すると、赤い長方形が描画されます。プログラムの開始時に、すべての変数(laenge、leerzeichen、hoehe)が0に設定されます。ボタンを押すと変数が変化しますが、OnPaintは新しい長方形を描画しませんか?何が問題なのですか?なんらかの方法でOnPaintを呼び出す必要がありますか?

4

2 に答える 2

5

Invalidate()変数を変更した後、を呼び出す必要があります(OnPaint内部的に呼び出します)

于 2013-01-11T08:46:29.350 に答える
0

OnPaintを直接呼び出さないでください。

むしろ、Win32(InvalidateRect())から継承されているように、ウィンドウが更新中にコントロールのOnPaintメソッドを呼び出すようにするには、コントロールの領域を無効にする必要があります(たとえば、Invalidate()を呼び出すことによって)。(この質問を参照してください)

OSがペイント/更新要求を処理できるのは、アプリケーションがWindowsメッセージキューを待機しているとき(つまり、ユーザー要求の処理が完了したとき、またはApplication.DoEvents()を呼び出したとき)のみであることに注意してください。

于 2013-01-11T08:52:43.793 に答える