3

ボタンがたくさんあるフォームに取り組んでいます。ユーザーが1つのボタンをクリックすると、背景の色が変わります。フォーム上の別のボタンをクリックすると、背景の色が変わり、前のボタンの色が元の色に戻るはずです。

すべてのボタンをハードコーディングすることでこれを行うことができますが、このフォームには多くのボタンがあります。これを行うにはもっと効率的な方法が必要だと確信しています

私はこれまでにこれを持っています

foreach (Control c in this.Controls)
{
    if (c is Button)
    {
        if (c.Text.Equals("Button 2"))
         {
             Btn2.BackColor = Color.GreenYellow;
         }
         else
         {

         }
    }
}

Btn2の背景を変更することができます。フォーム内の他のすべてのボタンの背景を変更するにはどうすればよいですか。各ボタンをハードコーディングせずにこれを行う方法についてのアイデア。

4

3 に答える 3

3

以下のコードは、フォーム上のボタンの数に関係なく機能します。button_Clickメソッドをすべてのボタンのイベントハンドラーに設定するだけです。ボタンをクリックすると、背景の色が変わります。他のボタンをクリックすると、そのボタンの背景の色が変わり、以前に色付けされたボタンの背景がデフォルトの背景色に戻ります。

// Stores the previously-colored button, if any
private Button lastButton = null;

..。

// The event handler for all button's who should have color-changing functionality
private void button_Click(object sender, EventArgs e)
{
    // Change the background color of the button that was clicked
    Button current = (Button)sender;
    current.BackColor = Color.GreenYellow;

    // Revert the background color of the previously-colored button, if any
    if (lastButton != null)
        lastButton.BackColor = SystemColors.Control;

    // Update the previously-colored button
    lastButton = current;
}
于 2013-01-22T13:32:32.323 に答える
0

これは、コントロールコンテナ(パネルなど)がない限り機能します。

foreach (Control c in this.Controls)
{
   Button btn = c as Button;
   if (btn != null) // if c is another type, btn will be null
   {
       if (btn.Text.Equals("Button 2"))
       {
           btn.BackColor = Color.GreenYellow;
       }
       else
       { 
           btn.BackColor = Color.PreviousColor;
       }
   }
}
于 2013-01-22T13:31:27.317 に答える
0

ボタンがパネル内にある場合は、以下のコードを実行します。foreachで、pnl2Buttonsパネル内のすべてのボタンを取得し、背景を変更するボタンのテキスト名を渡そうとすると、残りはSeaGreenになります。色。

foreach (Button oButton in pnl2Buttons.Controls.OfType<Button>())
{
   if (oButton.Text == clickedButton)
   {
       oButton.BackColor = Color.DodgerBlue;
   }
   else
   {
       oButton.BackColor = Color.SeaGreen;
   }
}
于 2021-12-14T05:19:09.790 に答える