-1

我需要你的帮助。我在 C#、Winforms 中使用图片框创建了一架钢琴。在图片框的属性中,我已将背景颜色设置为适当的注释(白色和黑色注释)。

我创建了一个组合框,这样我就可以选择和弦,比如 C 和弦、D 和弦……在这个链接上,你可以看到 C 和弦的正确音符。

钢琴c和弦

当我选择一个和弦(如 C 和弦)时,相应音符的背景颜色变为红色,但是当我在组合框中选择另一个和弦时,之前选择的和弦保持红色时出现问题。

所以我的问题是,当我在组合框中选择其他内容时,我是否可以将背景颜色设置回默认设置或破坏以前的行为,或者我需要使用图片框以外的其他内容?

这是我的代码:

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 回答