2011-08-13 16 views
3

は、現在約10コントロールのイベントハンドラで私のプログラムでは、私はこのコードを持っている:条件が満たされるまでコントロールを無効にする方法はありますか?

 if (!mapLoaded) 
      return; 

私がtrueにmapLoadedを設定するオープンファイルダイアログでマップをロードします。これを行うもう1つの方法は、すべてのコントロールを有効にするためにマップをロードした後、スタートアップのすべてのコントロールを無効にすることです。残念ながら、そこにコントロールが30+であり、コントロールの一部がmenustripアイテム、ToolStripの項目、パネルの項目であるため、これはどちらか、私は本当にthis.Controlsを通じてforeachループを行うことはできません。..

a.Enabled = true; 
b.Enabled = true; 
c.Enabled = true; 

のわずか30行です、スクロールバー、スプリッターなどが含まれており、そのループはそれをカバーしていません。

理想的には、単一の単純なループですべてのコントロールのenabledプロパティをtrueに設定する方法がありますが、その方法はわかりません。任意のアイデア?結合

答えて

7

使用データ:その値が変更されたときにオブザーバーを通知プロパティに

  1. 変更mapLoaded ...

    public bool MapLoaded 
    { 
        get 
        { 
         return mapLoaded; 
        } 
        set 
        { 
         if (value != mapLoaded) 
         { 
          mapLoaded = value; 
          MapLoadedChanged(this, EventArgs.Empty); 
         } 
        } 
    } 
    private bool mapLoaded; 
    
    public event EventHandler MapLoadedChanged = delegate {}; 
    //^or implement INotifyPropertyChanged instead 
    
  2. にあなたのコントロールのEnabledプロパティをデータバインドMapLoaded。 Windowsフォームデザイナを使用するか、コードを使用してデータバインディングを設定できます。

    a.DataBindings.Add("Enabled", this, "MapLoaded"); 
    b.DataBindings.Add("Enabled", this, "MapLoaded"); 
    c.DataBindings.Add("Enabled", this, "MapLoaded"); 
    
+0

これは私が探していたものです。私はそれを試してみます。ありがとう! –

+0

Windowsフォームデザイナを使用してデータバインディングを設定できると述べました。そのオプションはどこにありますか?コントロールを選択するとき、プロパティウィンドウにBindingsまたはDataBindingsプロパティが表示されません。 –

+0

@ John、これには通常4つのステップが含まれます(VS2010)。** 1。**新しいオブジェクトデータソースをプロジェクトに追加します。この場合、 'Form'クラス自体をデータソースとして追加します。 * Add Data Source *ウィザードで 'Form'クラスが表示されるように、プロジェクトを最初にコンパイルする必要があります。 ** 2。**フォームに 'BindingSource'コンポーネントを追加し、' Form'オブジェクトデータソースを選択します。 ** 3。** 'Form'のコンストラクタで、' formBindingSource.DataSource = this; 'を設定します。 ** 4。**データバインディングを定義するには、任意のコントロールの* Properties *で* Advanced Bindings *ウィザードを使用します。 – stakx

2
あなたのオープニング戦略の変更について、ユーザーがマップをロードしてみましょう新しいフォームを持ってどのように

、および1がロードされるまでは単にあなたのメインフォームをロードしない?右InitializeComponent();

+0

これはまともな提案ですが、私はstakxのソリューションを好んでいます。それにもかかわらず。 –

関連する問題