【问题标题】:Select / deselect, change color of multiple panels created dynamically选择/取消选择,更改动态创建的多个面板的颜色
【发布时间】:2016-11-11 17:07:15
【问题描述】:

我使用对象列表作为我的应用程序的输入,并且列表中的对象数量发生了变化。对于列表中的每个对象,我会动态创建一个面板并将它们添加到其他面板的控件中

    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 个面板更改为红色,反之亦然。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    如果我没看错,你想切换点击的面板。

    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;
        }
    }
    

    【讨论】:

    • 不是所有的,只有点击的。前后改变颜色。基本上我需要为每个动态创建的面板捕获当前的点击状态。
    • 那么新的解决方案是正确的。您可以在当前的BackColor 和要设置的新BackColor 之间切换。
    • 这个解决方案行不通,因为初始颜色不是绿色,而是 SteelBlue。
    • 从 SteelBlue 第一次点击它必须变成绿色,第二次点击变成红色和第三次绿色等等。
    猜你喜欢
    • 2016-02-16
    • 2012-02-18
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多