2013-03-25 122 views
-1

我需要你的帮助。我用C#,Winforms中的picturebox创建了一架钢琴。在pictureboxes的属性中,我将backcolor设置为适当的音符(白色和黑色音符)。如何使用c#重置默认背景颜色在picturebox中?

我创建了一个组合框,因此我可以选择和弦,如C和弦,D和弦......在此链接上,您可以看到C和弦的正确音符。

c chord for piano

当我选择一个和弦(如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; 

.....

请我需要你的帮助,我已经尝试过的东西,但没有奏效。

+0

它是WinForms还是WPF? – feralin 2013-03-25 16:16:21

+0

@feralin它的winforms – 2013-03-25 16:26:54

+0

好的。你有没有试过我的答案呢? – feralin 2013-03-25 16:32:37

回答

3

您必须将其他PictureBoxBackColor重新分配为原始颜色。例如,您可以创建一个存储原始颜色的Color的数组,然后将这些颜色复制到您要重置的PictureBox。部分代码:

// 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 ... 
    } 
} 
+0

谢谢......我已经学习并在C#中工作,但我忘了它一点:) – 2013-03-25 23:11:35

+0

@IvoKuzmanic这很好。只是继续学习,玩得开心:) – feralin 2013-03-25 23:27:40

相关问题