更改我的自定义UserControl的BackColor - 帮助!

时间:2009-10-20 20:56:25

标签: c# winforms collections foreach

洛尔

我在Form1上有一个面板。 我要将自定义usercontrol MovieItem 的几个实例添加到该面板。

要做到这一点,我要去:

panel1.Controls.Add(objMovieItem);

现在,在MovieItem.cs代码中,我添加了UserControl中所有内容的.Click事件,这样每当用户点击UserControl中的ANYWHERE时,它的背景颜色就会发生变化。

问题在于:

我在Form1上有大约10个UserControl实例(当然,在Panel1内部)。如何将所选的BackColor置于浅蓝色,并将所有其他颜色恢复为默认颜色?

这是我的代码:

private void SearchMovie()
{
     //All this does is create an instance of the UserControl and add it to Panel1.
     MovieItem NewMovie = new MovieItem();
     NewMovie.SearchMovie(txtSearch.Text);
     panel1.Controls.Add(NewMovie);
}

现在,在我的用户控件代码中:

private void MovieItem_Click(object sender, EventArgs e)
    {            
        MainSearchForm MainFormObject = new MainSearchForm();

        foreach (Control y in MainFormObject.Controls["panel1"].Controls)
        {
            if (y is UserControl)
            {
                if (y is MovieItem)
                {                        
                    y.BackColor = Color.White;
                }                    
            }
        }

        this.BackColor = Color.LightBlue;
    }

这是发生了什么。点击事件100%正常。按预期工作。当我单击UserControl的对象时,它会正确地改变颜色。但另一方不会改回默认状态。我做错了什么。

非常感谢。

1 个答案:

答案 0 :(得分:2)

在处理程序中,您创建一个 new MainSearchForm对象,然后将控件设置为白色,这样就不会影响您正在显示的表单。

使用 this.Parent 查找父面板,或使用静态变量来保存对mainForm(或其他)的引用。

如:

private void MovieItem_Click(object sender, EventArgs e)
{
    foreach (Control y in this.Parent.Controls)
    {
        if (y is MovieItem && y != this)
            y.BackColor = Color.White;
    }
    this.BackColor = Color.LightBlue;
}