2011-01-14 11 views
2

私はウィンドウ上のすべてのバートンを無効にする方法があります。 しかし、私は更新すべてのボタンを無効にする方法

AC#のコードビハインド

void DisableButtons() 
    { 
     for(int i = 0; i>= this.Resources.Count -1; i ++) 
     { 
      if (this.Resources[i].GetType() == typeof(Button)) 
      { 
       Button btn = (Button)this.Resources[i]; 
       btn.IsEnabled = false; 
      } 
     } 

    } 

とExpression Blendの3を使用しているリソースコレクションに

をそれに合わせて、ボタンの種類を取得するように見えることはできません

答えをありがとう! ループが機能していますが、コードが正しくありません。 this.Resources 私のボタンが含まれていないようです!これはブレンドものでしょうか?

そうです。 私はそれを手動でやりました。私は急いで、簡単な解決策はありません。すべての入力をありがとう!

答えて

2

私は何かを誤解している可能性がありますが、あなたのウィンドウのリソース内にあなたのウィンドウにボタンが含まれているのを見つけようとしていますか?これらの2つの事柄はすべて異なるものですから。
その場合は、this.IsEnabled = falseを設定してください(ただし、ボタンだけでなく、他のものを無効にする)か、LogicalTreeHelper/VisualTreeHelperを使用して論理ツリー(またはSilverlightの場合はビジュアルツリー)をトラバースするか、高価な方法。
手動で回避するには、すべてのボタンに名前を付け、コードビハインドでそれらのリストを作成し、そのリストを繰り返します。しかし

最高は(あなたは、単にコントロール自体に比べMVVMを使用していない場合は - しかし、それを作るのDependencyPropertyを)あなたのViewModelにAreButtonsEnabledと呼ばれるブールプロパティを作成することですし、それらにすべてのボタンのIsEnabledプロパティをバインド!そしてコードビハインドでは、そのブール値をfalseに設定するだけです。

これがあなたのケースでない場合は、申し訳ありませんが、私はあなたの時間を無駄にしました。

+0

これはケースであり、あなたの興味深いアイデアです。私はそれを試してみます。 –

0

それを実現するために

if (this.Resources[i].GetType() == typeof(Button))) 

またはより良い

if (this.Resources[i] is Button)) 
4
void DisableButtons() 
{ 
    for(int i = 0; i < Resources.Count; i ++) 
    { 
     var btn = Resources[i] as Button; 
     if(btn != null) 
     { 
      btn.IsEnabled = false; 
     } 
    } 
} 

簡単な方法は、LINQクエリで使用しますforeach命令であるが、この方法は、のために簡単whanよりresuourcesを必要としています。

void DisableButtons() 
{ 
    foreach(var button in Resources.OfType<Button>()) 
    { 
     button.IsEnabled = false; 
    } 
} 
0

ループ文が間違っているようです。 i>= this.Resources.Count -1i <= this.Resources.Count - 1;にする必要があります。

また、これは単なるスタイルのことですが、私はとしてそれを書き換えたい:そのことについて

for(int i = 0; i < Resources.Count; i ++) 
    { 
     Button btn = Resources[i] as Button; // btn will be null if not a Button 

     if(btn != null) 
     { 
      btn.IsEnabled = false; 
     } 
    } 
0

何が?

if (this.Resources[i] is Button) 

こうすると、ボタンから継承するものをすべて取得できます。

0

私は単純な方法を使用します。 まず、boolを作成します。

bool enableButtons = true; 

これで、常にアクティブなフォームにタイマーを追加しました。私は、ボタンを無効にしたい時はいつでも

private void timer1_Tick(object sender, EventArgs e) 
{ 
if (enableButtons = false) 
{ 
    button1.Enabled = false; 
    button2.Enabled = false; 
} 
else 
{ 
    button1.Enabled = true; 
    button2.Enabled = true; 
} 
} 

だから、私はfalseにenableButtonsを変更します。

関連する問題