2016-11-11 69 views
0

我使用对象列表作为我的应用程序的输入,并且列表中对象的数量发生更改。对于列表中的每个对象我动态创建小组,并将它们添加到其他面板选择/取消选择,更改动态创建的多个面板的颜色

private void addPanel(string name, int positionFromLeft, Panel mainPanel) 
    { 
     Panel panel = new System.Windows.Forms.Panel(); 
     panel.Name = name; 
     panel.Location = new System.Drawing.Point(50 + positionFromLeft, 160); 
     panel.BackColor = System.Drawing.Color.SteelBlue; 
     panel.Size = new System.Drawing.Size(120, 40); 
     panel.Click += new EventHandler(this.pClick);    
     mainPanel.Controls.Add(panel); 
    } 

的控制,以每屏我添加了一个单击事件处理程序而改变面板的颜色:

private void pClick(object sender, EventArgs e) 
    { 
     Panel panel= (sender as Panel); 
     panel.BackColor = Color.Green; 
    } 

第二次点击时,如何将每个面板的颜色更改为不同的颜色(红色等)?再次点击时将其改回(绿色等)。基本上,每次点击都会将面板的颜色从绿色更改为红色,反之亦然。它必须与每个面板配合使用,以便在运行时可以将10个面板的颜色更改为绿色,将10个面板更改为红色,反之亦然。

回答

-1

我找到了一个解决方案,非常感谢。

private void pClick(object sender, EventArgs e) 
{ 
    Panel panel = (sender as Panel); 
    if (panel.BackColor == Color.SteelBlue) 
    { 
     panel.BackColor = Color.Green; 
    } 
    else if (panel.BackColor == Color.Green) 
    { 
     panel.BackColor = Color.Red; 
    } 
    else if (panel.BackColor == Color.Red) 
    { 
     panel.BackColor = Color.Green; 
    } 
} 
0

如果我说得对,你想切换点击面板。

private void pClick(object sender, EventArgs e) 
{ 
    Panel panel = (sender as Panel); 
    if (panel.BackColor == Color.Green) { 
     panel.BackColor = Color.Red; 
    } else if (panel.BackColor == Color.Red) { 
     panel.BackColor = Color.Green; 
    } 
} 
+0

不是所有的人,只有被点击的人。前后改变颜色。基本上我需要捕获动态创建的每个面板的当前点击状态。 – 01egi4

+0

然后新的解决方案是正确的。您可以在当前的'BackColor'和想要设置的新'BackColor'之间切换。 – jorgonor

+0

此解决方案不起作用,因为初始颜色不是绿色,而是SteelBlue。 – 01egi4