(洛尔)
我在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的对象时,它会正确地改变颜色。但另一方不会改回默认状态。我做错了什么。
非常感谢。
答案 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;
}