2013-05-05 5 views
5

私はShowDialogを使用して呼び出すフォームを持っています。このフォームには、テキストボックス、ラベル、およびボタンがいくつか含まれています。私が抱えている問題は、テキストボックスがフォーム自体の前に描画され、他のコントロールが描画されているということです。コントロールは同時に描画されません

私はこれが問題を引き起こしていることができれば、私はよく分からないOnPaint方法オーバーライドしています:

protected override void OnPaint(PaintEventArgs e) 
{ 
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid); 
    base.OnPaint(e); 
} 

それはわずかな遅れだが、それは目に見えると迷惑なんです。ありがとうございました。

フォームは途中でダブルバッファされます。

EDIT:フォームにFormBorderStyleが含まれていないという問題が特定されています。 FormBorderStyleSizableに設定すると、この問題は発生しません。しかし、私のボーダースタイルとしてFormBorderStyle.Noneが必要であることに注意してください、私は解決策をまだ見つけていません。

+1

あなたはラベル、テキストボックスとボタンの描画に関連するすべての関連のコードを投稿することができますか? – JosephGarrone

+0

実際、親要素は、それ自身をレンダリングする前に各子コントロールのrenderメソッドを呼び出します。これがデフォルト動作です。フォームロードが完了したらダイアログを表示することができます。 – Saravanan

+0

すべてのコントロールはVisual Studioデザイナーを介して追加されていますので、これらのコントロールの図面には触れませんでした。 –

答えて

1

ダイアログボックスのフォームにこれを追加してみてください:

protected override CreateParams CreateParams 
    { 
     get 
     { 
      // Activate double buffering at the form level. All child controls will be double buffered as well. 

      CreateParams cp = base.CreateParams; 

      cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 

      return cp; 
     } 
    } 
+0

これは感謝しました! –

関連する問題