2012-03-21 19 views
7

ウィンドウハンドルが作成された後にLoadイベントが発生するはずですが、の前にが実際に表示されることがあります。ほとんどの場合、これは正しいと思われます。しかし、WindowStateプロパティをFormWindowState.Maximized(VSデザイナーを使用するか、またはコンストラクターでプログラムで設定)に設定してフォームを作成すると、Loadイベントが発生する前にウィンドウが表示されることがわかりました。たとえば、次の順番でWindowStateをMaximizedに設定するのが遅すぎる

using System; 
using System.Windows.Forms; 

namespace MyApplication 
{ 
    public partial class MyForm : Form 
    { 
     public MyForm() 
     { 
      InitializeComponent(); 
      WindowState = FormWindowState.Maximized; 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      MessageBox.Show("OnLoad - notice that the window is already visible"); 
      base.OnLoad(e); 
     } 
    } 
} 

これは、ウィンドウが表示されている間(Form.Loadイベント中にレイアウトされている)、そのコントロールのサイズが変更されている間、多くの点滅する表示形態を引き起こします。状態を最大化するように設定しなかった場合、ウィンドウが表示される前にすべてのサイズ変更が行われます(これは私が予想したものです)。

Loadイベントが終了するまでWindowStateの設定を保留にすることはできますが、ウィンドウが表示され、すべてのコントロールのサイズが変更されるため、ちらつきが多く発生します。

どのような考えですか?

+3

'こと。 – LarsTech

+1

'Load'イベントでコントロールのサイズを変更することはやや疑わしいです。 'Dock'や' Anchor'プロパティや 'TableLayoutPanel'のような組み込みのコントロールのサイズ変更の仕組みに頼らないのはなぜですか?後で手動でウィンドウのサイズを変更すると、コントロールのサイズも手動で変更されますか? –

+0

私はこれも得ています。私はユーザーセッションの間にフォームをサイズ変更できるように、ユーザーセッション間にWindowStateを保存しています。ユーザーがこれまでに持っていたものに変更して、WindowStateを最大化するとちらつきがたくさんあります。 –

答えて

0

ウィンドウの外観を変更する(サイズ変更など)と、ウィンドウが表示されることがあります。

あなたのctorの中.Hide()または.Visible = Falseを呼び出し、あなたは(Loadイベントの使用System.Diagnostics.Debug.WriteLineにいくつかの診断メッセージを配置する必要がある場合は.LOAD

+0

visibleをfalseに設定しても効果がないようです。これは、フォームがアプリケーションのメインフォームであり、Application.runを介して表示されているという事実と関係している可能性があります。 – user1283610

1

の終わりに再びそれを目に見えるようでした) ;
MessageBoxを使用すると、通常のフローの順序が破棄されます。

protected override void OnLoad(EventArgs e)   
{    
    System.Diagnostics.Debug.WriteLine("onLoad");    
    base.OnLoad(e);   
} 

This post発射最初の活性化イベントが発生するまでのWindowStateの変更を遅らせるようにしてください詳細

2

を説明します。これはVS2005とフレームワーク2.0でVB.NETで私のために動作します。

+0

これは、ウィンドウ状態が最大化から標準に変更されたときに機能しました。代わりに、ウィンドウLoadイベントで最大化するように設定しました。 – NielW

1

あなたはのInitializeComponent()の前には、WindowState を設定する必要があります。loadイベントでMessageBox.Show`を表示するようにフォームを強制します

public Form() //Constructor 
    { 
     WindowState = FormWindowState.Maximized; 

     InitializeComponent(); 
    } 
関連する問題