我正在尝试创建一个自定义控件,可以在点击时触发。 我的控件只是一个面板,里面有几个标签和一个图片框。
点击效果很好,唯一的问题是我必须点击控件的背景,如果我按下图片框,则无效。
我已将点击事件添加到控件中,但我想在其中的每个位置按下以触发事件,而不仅仅是面板的背景。
我考虑添加一个完全覆盖控件的透明对象。我实际上不喜欢这个想法,但是,我尝试过一个图片盒,但我无法看透它。它不透明。我只能看到面板背景,但它涵盖了标签和图像。
感谢您的支持。
答案 0 :(得分:3)
如果你的面板中只有几个对象,你可以将它包含的所有对象的Click
事件挂钩到同一个事件处理程序,这样做没有错。
public class MyUserControl : UserControl
{
public event Action<MyUserControl> MyControlClick
public string ID {get; set;}
public MyUserControl()
{
InitializeComponents();
// The same event handler code will be used for the three controls
myPictureBox.Click += global_Click;
myLabel1.Click += global_Click;
myLabel2.Click += global_Click;
this.Click += global_Click;
}
void global_Click(object sender, EventArgs e)
{
if (MyControlClick != null)
MyControlClick(this);
}
}
如果您拥有更重要的对象数量,则可以依靠this answer创建一个真正透明的面板来处理点击。缺点是您必须根据鼠标位置使用HitTest
检测单击了哪个对象。
在表格方面:
aControl.MyControlClick += aControl_MyControlClick;
// ...
// This code is triggered when a MyUserControl is clicked
void aControl_MyControlClick(MyUserControl ctl)
{
MessageBox.Show(ctl.ID);
}
答案 1 :(得分:0)
其实!您不能向Usercontrol中的元素引发任何事件,除非您必须将自己的方法应用于您的usercontrol,或者您可以在usercontrol中禁用该元素,但它将更改该元素的颜色但它会在您单击时引发单击事件控制。