-1

あなたの助けが必要です。C#、Winformsのピクチャーボックスを使用してピアノを作成しました。ピクチャーボックスのプロパティで、バックカラーを適切なノート(白と黒のノート)に設定しました。

そして、コンボボックスを作成して、Cコード、Dコードなどのコードを選択できるようにしました。このリンクでは、Cコードの正しい音符を確認できます。

ピアノのためのc和音

1つのコード(Cコードなど)を選択すると、適切なノートの背景色が赤に変わりますが、コンボボックスで別のコードを選択すると、前に選択したコードが赤のままになるという問題があります。

だから私の質問は、コンボボックスで他のものを選択したときに、バックカラーのデフォルト設定に戻すか、以前の動作を破棄することができますか、それともpicturebox以外のものを使用する必要がありますか?

これは私のコードです:

private void comboBox_selectNote_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (comboBox_selectNote.SelectedIndex)
        {
            case 0: //C
                //RED
                pbC1.BackColor = Color.Red;
                pbE1.BackColor = Color.Red;
                pbG1.BackColor = Color.Red;
                break;
            case 1: //C#
                //RED
                pbCsharp1.BackColor = Color.Red;
                pbF1.BackColor = Color.Red;
                pbGsharp1.BackColor = Color.Red;
                break;

....。

私はあなたの助けが必要です、私はすでに何かを試しましたが、それはうまくいきませんでした。

4

1 に答える 1

3

BackColor他のPictureBox-esを元の色に再割り当てする必要があります。たとえば、Color元の色を格納するsの配列を作成し、それらの色PictureBoxをリセットする-esにコピーすることができます。いくつかのコード:

// assumes you have NUM_KEYS piano keys / PictureBoxes
Color[] pianoKeyColors = new Color[NUM_KEYS];
// fill the pianoKeyColors array with the colors you want,
// perhaps alternating white-black-white- ...
// you may want to do that in the constructor for your Form

// you should also store the PictureBox-es in an array, so you can easily
// reference the one you want

private void comboBox_selectNote_SelectedIndexChanged(object sender, EventArgs e)
{
    // reset all PictureBox-es to the original colors
    for (int key = 0; key < NUM_KEYS; key++)
        pianoKeys[key].BackColor = pianoKeyColors[key];
    // and then only set the BackColor to Red of keys in the chord
    switch (comboBox_selectNode.SelectedIndex)
    {
        case 0: // C chord
            pianoKeys[KEY_C1].BackColor = Color.Red;
            pianoKeys[KEY_E1].BackColor = Color.Red;
            pianoKeys[KEY_G1].BackColor = Color.Red
            break;
        ... and the other cases ...
    }
}
于 2013-03-25T16:15:54.443 に答える