无论鼠标是否在子控件上,都更改控件的背景颜色
Change background color of control regardless if mouse is over a child control
我正在制作一个自定义控件,想法是当鼠标在控件上时,背景颜色不同,当鼠标不再在控件上时,return 为原始颜色。
一个问题是当鼠标悬停在子控件上时没有任何反应
我已经尝试为所有子控件分配一个通用的鼠标悬停事件处理程序,但是无论如何,当鼠标快速移动时什么也没有发生。
我想要一个类似于按钮控件的行为,无论鼠标移动多快,背景颜色似乎都没有问题
所有子项必须共享来自父项的 MouseEnter
事件将访问的相同方法,因为否则,当您的鼠标悬停在子项上时,它将引发父项的 MouseLeave
事件。
这是一个例子:
public partial class Test : Form
{
public Test()
{
InitializeComponent();
myPictureBox1.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
myLabel1.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
myLabel2.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
}
private void Panel_MouseEnter(object sender, EventArgs e)
{
AllControls_MouseEnter();
}
private void Panel_MouseLeave(object sender, EventArgs e)
{
AllControls_MouseLeave();
}
private void AllControls_MouseEnter()
{
Panel.BackColor = Color.Firebrick;
}
private void AllControls_MouseLeave()
{
Panel.BackColor = Color.White;
}
}
当然,myPictureBox1
、myLabel1
和 myLabel2
是 Panel
的子代,你可以猜到。
或者如果你有很多控件,你可以遍历所有 Controls
父集合(这是我会选择的方法,而不是分配给所有控件),像这样:
foreach (var c in Panel.Controls)
{
((Control)c).MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
}
这是测试表格的演示(带和不带 foreach...
):
我正在制作一个自定义控件,想法是当鼠标在控件上时,背景颜色不同,当鼠标不再在控件上时,return 为原始颜色。
一个问题是当鼠标悬停在子控件上时没有任何反应
我已经尝试为所有子控件分配一个通用的鼠标悬停事件处理程序,但是无论如何,当鼠标快速移动时什么也没有发生。
我想要一个类似于按钮控件的行为,无论鼠标移动多快,背景颜色似乎都没有问题
所有子项必须共享来自父项的 MouseEnter
事件将访问的相同方法,因为否则,当您的鼠标悬停在子项上时,它将引发父项的 MouseLeave
事件。
这是一个例子:
public partial class Test : Form
{
public Test()
{
InitializeComponent();
myPictureBox1.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
myLabel1.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
myLabel2.MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
}
private void Panel_MouseEnter(object sender, EventArgs e)
{
AllControls_MouseEnter();
}
private void Panel_MouseLeave(object sender, EventArgs e)
{
AllControls_MouseLeave();
}
private void AllControls_MouseEnter()
{
Panel.BackColor = Color.Firebrick;
}
private void AllControls_MouseLeave()
{
Panel.BackColor = Color.White;
}
}
当然,myPictureBox1
、myLabel1
和 myLabel2
是 Panel
的子代,你可以猜到。
或者如果你有很多控件,你可以遍历所有 Controls
父集合(这是我会选择的方法,而不是分配给所有控件),像这样:
foreach (var c in Panel.Controls)
{
((Control)c).MouseEnter += (sender, e) => { AllControls_MouseEnter(); };
}
这是测试表格的演示(带和不带 foreach...
):