6

ボタンをクリックすると、前のすべてのボタンが強調表示されるように、フォーム上のいくつかのボタン間に何らかのリンクを作成しようとしています[ある種のボリュームコントローラー]

ここに画像の説明を入力

ボリュームコントローラーと想像してみてください。これらの色付きのボタンはすべて灰色になり、達成したいのは、ボタンをクリックすると、その前のすべてのボタンが色付けされることです。ただし、大量の無駄なコードを使用せずに、このような動作を行うための最良の方法は何ですか...

4

2 に答える 2

4

まず、すべてのボタンを配列に追加してから、そこから処理する必要があります

コード

//Create an array of buttons and hook up the Click event of each of them
private Button[] VolumeButtons { get; set; }

public Main()
{
    InitializeComponent();

    //Assuming that you have 21 buttons as it appears in your picture...
    VolumeButtons = new Button[21];
    VolumeButtons[0] = button1;
    VolumeButtons[1] = button2;
    VolumeButtons[2] = button3;
    VolumeButtons[3] = button4;
    VolumeButtons[4] = button5;
    VolumeButtons[5] = button6;
    VolumeButtons[6] = button7;
    VolumeButtons[7] = button8;
    VolumeButtons[8] = button9;
    VolumeButtons[9] = button10;
    VolumeButtons[10] = button11;
    VolumeButtons[11] = button12;
    VolumeButtons[12] = button13;
    VolumeButtons[13] = button14;
    VolumeButtons[14] = button15;
    VolumeButtons[15] = button16;
    VolumeButtons[16] = button17;
    VolumeButtons[17] = button18;
    VolumeButtons[18] = button19;
    VolumeButtons[19] = button20;
    VolumeButtons[20] = button21;

    foreach (var volumeButton in VolumeButtons)
        volumeButton.Click += VolumeButton_Click;
}

void VolumeButton_Click(object sender, EventArgs e)
{
    //Find the index of the clicked button
    int index = Array.FindIndex(VolumeButtons, 0, VolumeButtons.Length, button => button == ((Button)sender));

    //Set the color of all the previous buttons to Aqua, and all the forward buttons to gray [ you may play with it to match your colors then ]
    for (int i = 0; i < VolumeButtons.Length; i++)
        VolumeButtons[i].BackColor = i <= index ? Color.Aqua : Color.Gray;
}
于 2013-08-15T02:02:00.097 に答える
2
  1. ボタンを配列に配置する
  2. 配列内nのボタン ( ) のインデックスを検索し、各ボタンのスタイルを適切に設定するクリック イベントを作成します。sender0n
  3. 各ボタンをクリック イベントに結び付ける

自分でできる限りのことを行い、必要に応じて具体的な質問をしてください。

于 2013-08-15T01:43:54.913 に答える