2016-11-29 15 views
0

8つの独立したタスク(progressBar0〜progressBar7)に対して8つの別々のプログレスバーがあるWindowsフォームアプリケーションがあります。これらをコード内のリストに追加して、それらを反復処理することができます。これまでのところは良いリストにwinformプログレスバーを追加する

foreach (Control control in Controls) 
{ 
    if (control.Name.Contains("progressBar")) { progressBar.Add(control); } 
} 

List<Control> progressBar = new List<Control>(); 

は、今私は私のコントロールを反復処理し、自分の名前に「プログレスバー」を含むものを追加します。

私はリストを宣言します。しかし、私は.Valueのプロパティを設定することはできません。

progressBar[0].Value == 100; <-- this doesn't work 

上記コンパイルされませんし、「コントロール 『は値』の定義が含まれていません」というエラーになります。不思議なことに、私がintellisenseを使用すると、progressBarにドリルダウンしてValueパラメータを見つけることができます。しかし何らかの理由で私はプログラム的にアクセスすることができず、ウォッチリストからもそれを検索することはできません。

私はACCESSIBILITYOBJECTを通じて値にアクセスするが、文字列形式で、で動作するように迷惑になることができます。

progressBar[0].AccessibilityObject.Value = "100%" <-- this works fine 

私は直接各プログレスバーにアクセスする場合、すべてが正常である:

progressBar0.Value = 100; <-- this works fine 

何私は間違っている?

+2

'foreachの(プログレスバーをControls.OfType に())'私がまさに必要 –

答えて

1

すべてのコントロールの基本タイプであるControlのリストを使用しています。 Valueは、一部のコントロール(この場合はProgressBar)のみに固有のプロパティです。

あなたはProgressBarにキャストする必要があります。

var progressBars = new List<ProgressBar>(); 

foreach (var control in Controls) 
{ 
    // this ensure the type is a ProgressBar, unlike name, it cant be randomly assigned 
    if (control is ProgressBar) 
    { 
     // a cast is needed here 
     progressBars.Add(control as ProgressBar); 
    } 
} 

progressBars[0].Value = 100; 
+0

、キャストがありませんでした。 – masospaghetti

関連する問題