2009-08-21 1 views
0

私は分割パネルを持つフォームを持っています。 1つの分割には、最後に押されたボタンの色をプログラムで変更するボタンのグループがあります。次のループは正しく実行され、色は正しく設定されているようですが、フォームはそれを表していません。ループが完了し、ボタンの色を再確認すると、前の状態に戻ります。ボタンBackColorが期待通りに機能しない

For Each formControl As Control In Me.FormSplitContainer.Panel1.Controls 
    If formControl.GetType() Is GetType(Button) Then 
    If CType(sender, Button) Is CType(formControl, Button) Then 
     CType(sender, Button).BackColor = Color.White 
    Else 
     CType(sender, Button).BackColor = System.Drawing.SystemColors.ControlDark 
    End If 
    End If 
Next 

私は以下のコードを実行して、所望の効果を得るが、あまりエレガントなようで、ボタンが追加または削除されるように、明らかに更新が必要になることができます。

DataFeedButton.BackColor = System.Drawing.SystemColors.ControlDark 
IncentiveButton.BackColor = System.Drawing.SystemColors.ControlDark 

CType(sender, Button).BackColor = Color.White 

誰でも私が見逃しているものを見てください。

答えて

1

ボタン変数に送信者を割り当ててから、その色を割り当てます。

dim b as button 

そしてループで、それをこのように割り当てる:

b = sender 
b.backcolor = color.white 
+0

正確にはわかりませんが、ループ内にこれを追加すると、コードが期待通りに機能します。ありがとう –

+0

私は、cTypeが代入文の左側でうまくいかない理由は確かではありませんが、プロパティを変更する場合はSenderを適切な型の変数に代入する方が安全です。 プロパティの変更が元のボタンに影響しないように、Ctypeがボタンオブジェクトのコピーのループ外で最適化されている可能性があります。代入対象としてcTypeを使用すると、一般的には少し信頼性が低いようです。 formControlの部分と時間のSender部分を使用する理由がわかりません。それは(または)問題かもしれません。 – xpda

0

ここで、このコードを呼び出していますか?彼らはボタンをクリックするたびに?私には、フォームのボタンのバックカラーをすべて白に設定しているようです。私はあなたが '最後に押された'状態をテストしているところは見ません。

+0

あなたが正しいです。ボタンをクリックするたびにループを実行しようとしています。送信者は、クリックされたボタンです。混乱させて申し訳ありません。 –

+0

コレクション全体をループするのではなく、モジュールレベルのvarにprevボタンを保存して、別のボタンをクリックしたときに、controlDarkにリセットするものを正確に知ることができますか? – Beth

+0

これはKyralessaが言ったことと一緒に行く。すべてのボタンがデフォルトになり、クリックされたボタンが白く設定されます。それは、ベスとキラルデサの両者が取り組んでいる問題の両方をカバーするだろう。 – kralco626

関連する問題