2012-04-19 16 views
1

私はOnPaintを上書きするWinFormを持っていますが、このフォームはのMDI親です。ただしWinFormに子供がいる場合でもOnPaintは表示されませんか? InvalidateUpdateを使用しようとしましたが、OnPaint eatherをトリガーしませんか?OnPaintがトリガされませんでしたか?

私はPaintイベントを試しましたが、ここで同じですか?

+0

OnPaintがトリガーされないと、フォームを見ることさえできます...他に何か間違っています。いくつかのコードを提供できますか? – Tigran

+0

アプリケーションの実行中にフォーム上のコントロールを表示できる場合、OnPaintイベントが発生していることを保証できるので、間違った動作を特定していません。 –

答えて

2

Form.IsMdiContainerを設定すると、実際にはMdiClientコントロールがフォームに追加されます。子フォームは実際にはフォーム自体ではなく、MdiClientコントロール内に表示されます。フォームのペイントイベントが発生していますが、MdiClientはフォームにドッキングされているため、表示されません。代わりに、MdiClientのペイントイベントにアクセスする必要があります。

public partial class Form1 : Form 
{ 
    public Form1() { 
     InitializeComponent(); 

     mdiClient = Controls[0] as MdiClient; 

     if (mdiClient != null) { 
      mdiClient.Paint += OnMdiClientPaint; 
     } 
    } 

    private MdiClient mdiClient; 

    private void OnMdiClientPaint(object sender, PaintEventArgs e) { 
     e.Graphics.FillRectangle(Brushes.Blue, mdiClient.ClientRectangle); 
    } 
} 
+0

次に、base.OnPaint(...)を無効にするにはどうすればよいですか? '//base.OnPaint(e);' – Rafael

関連する問題