1
class MainWindow : Form
{
public MainWindow()
        {
            InitializeComponent();
            // Handlers
            Paint += new PaintEventHandler(MainWindow_Paint);
            MouseClick += new MouseEventHandler(MainWindow_MouseClick);
        }
void MainWindow_MouseClick(object sender, MouseEventArgs e)
        {
            var p = new Point(e.X, e.Y);
            m_ListOfFigures.ToArray()[0].addPoint(ref p);
            Refresh();
        }
void MainWindow_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

        }

wm_paint に登録されたメソッドが呼び出されない理由がわかりません。
私の間違いを指摘できますか?

4

1 に答える 1

3

あなたがしたことはうまくいったはずですが、Microsoft は、ユーザー コントロールを描画するOnPaint()には、イベントをサブスクライブするのではなく、オーバーライドする必要があると言っています。Paint

のドキュメントにあるようにControl.Paint

When creating a new custom control or an inherited control with a different visual appearance, you must provide code to render the control by overriding the OnPaint method.

詳細については、http: //msdn.microsoft.com/en-us/library/cksxshce.aspxを参照してください。

ただし、ユーザー コントロールやカスタム コントロールではないフォーム クラス (使用しているクラスなど) には当てはまらないことに注意してください。それでもなお、OnPaint() をオーバーライドしてコントロール自体をペイントする方が一般的です。)

以下をフォームに追加してみてください。

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

     // Now draw stuff using e.Graphics
} 

このPaintイベントは、ユーザー コントロールまたはフォーム自体が使用するためのものではありません。代わりに、含まれているコントロール内のコントロールが再描画されているときに通知を受けたい場合に使用します。

ただし、そうは言っても、Paintイベントを使用しても機能するはずです...しかし、MicrosoftOnPaint()は、ペイントを行うにはオーバーライドする必要があると言っています(おそらく、あなたが持っていたような問題のため)。

于 2013-06-30T18:39:59.623 に答える