我写了一个用户控件(UserControl),
例如类名为A。在窗口上画了此控件,名为a。
创建了a的Click事件。
当程序运行时,单击a控件时并没有触发a的Click事件。经过调查后发现,
a的Click事件只有单击A本身(并非A中的子控件)才会触发。
所以,
我在 A中的所有在上层的子控件的所有Click事件中 都重新触发一次A的Click事件
才解决此问题。现在问题是:
有没有其它简单的方法来解决此问题?
(除了用循环A中所有子控件动态的注册其Click事件)
例如类名为A。在窗口上画了此控件,名为a。
创建了a的Click事件。
当程序运行时,单击a控件时并没有触发a的Click事件。经过调查后发现,
a的Click事件只有单击A本身(并非A中的子控件)才会触发。
所以,
我在 A中的所有在上层的子控件的所有Click事件中 都重新触发一次A的Click事件
才解决此问题。现在问题是:
有没有其它简单的方法来解决此问题?
(除了用循环A中所有子控件动态的注册其Click事件)
如图:我在UserControl中,分别响应两个button的click事件: private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Button1");
} private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Button2");
}
然后在引用该控件的Form中,响应该控件的click事件(也就是说整个控件的单击事件):
private void userControl11_Click(object sender, EventArgs e)
{
MessageBox.Show("main");
}ok,说完了,点击按钮分别弹出“Button1”和“Button2”,点击橙色区域弹出“main”。
没有你说的那个问题呀
楼主以为点击Button1时“应该弹出main”!
关于我这个问题我可能没有说明白。
补充说明:
1、单击分两种,一种是单击UserControl本身,一种是单击UserControl中的某个子控件。
当单击UserControl中的子控件时不会触发UserControl本身的单击事件。
2、我的UserControl中有N个子控件,所有的控件已经把UserControl本身填充满了,UserControl本身已经看不到了,所以不可能触发UserControl本身的单击事件。由于UserControl在窗口中是一个单独的控件,无论单击此控件的哪个位置,都应该触发该控件单击事件。
哪怕单击UserControl中的一个控钮,该按钮的单击事件和UserControl本身的单击事件都要触发。
这个两个单击事件我都已经实现了,只不过我的写法可能有点多(写法请参照我上面说的问题)。
我只想问有没有更简单的写法?
(我不是害怕麻烦,而是想学习.Net中有没有已经实现的方案)
'定义单击事件
Public Shadows Event Click(ByVal sender As Object, ByVal e As ShapeLayerItemEventArgs)'单击所有的控件时,触发已定义的Click事件(※1)
Private Sub AllContorl_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles pnlLeft.Click, pnlInfo.Click, pnlTools.Click, picPreview.Click, lblText.Click, btnUp.Click, btnDown.Click RaiseEvent Click(Me, New ShapeLayerItemEventArgs(Me.Name, _shapeID, lblText.Text))End Sub''''Form
'UserControl的Click事件
Private Sub ShapeLayerItem_Click(ByVal sender As Object, ByVal e As ShapeLayerItemEventArgs) ......End Sub在※1处,注册了UserControl中所有子控件的Click事件,虽然可以用UserControl的Controls属性来循环所有的控件进行动态注册,但总感觉不是很好,不知道.Net中有没有已经实现的功能。
请教大家。