Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 点击内部控件时提升用户控件单击_C#_.net_Vb.net - Fatal编程技术网

C# 点击内部控件时提升用户控件单击

C# 点击内部控件时提升用户控件单击,c#,.net,vb.net,C#,.net,Vb.net,我创建了一个用户控件,里面有一些标签和图片 然后,我将这个用户控件添加到表单中 在events表单中,我设置了UserControl\u click事件以引发函数 我遇到的问题是,如果我单击UserControl后台,那里没有标签或图片,则会引发函数。但是,如果我单击控件内的标签或图片,则函数不会启动 我希望在用户控件内单击控件时的行为与单击控件背景时的行为相同。您的标签捕获单击事件。订阅他们的点击事件,并调用从UserControl\u Click调用的同一处理程序。标签捕获点击事件。订阅他们

我创建了一个用户控件,里面有一些标签和图片

然后,我将这个用户控件添加到表单中

在events表单中,我设置了UserControl\u click事件以引发函数

我遇到的问题是,如果我单击UserControl后台,那里没有标签或图片,则会引发函数。但是,如果我单击控件内的标签或图片,则函数不会启动


我希望在用户控件内单击控件时的行为与单击控件背景时的行为相同。

您的标签捕获单击事件。订阅他们的点击事件,并调用从UserControl\u Click调用的同一处理程序。

标签捕获点击事件。订阅他们的单击事件并调用从UserControl\u Click调用的同一处理程序。

您必须在UserControl中的每个控件单击事件上添加添加函数:

Public Event ControlClick(sender As Object, e As EventArgs)

Private Sub uc1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For each elem As Control in Me.Controls
        AddHandler elem.Click, AddressOf RaiseClick
    Next
End Sub

Private Sub RaiseClick(sender As Object, e As EventArgs)
    RaiseEvent ControlClick(sender, e)
End Sub
然后到外面去看两件事:

Public Sub UserControl_click(sender As Object, e As EventArgs) _
                           Handles UserControl1.Click, UserControl1.ControlClick
    '...
End Sub

必须在UserControl中的每个控件单击事件上添加添加函数:

Public Event ControlClick(sender As Object, e As EventArgs)

Private Sub uc1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For each elem As Control in Me.Controls
        AddHandler elem.Click, AddressOf RaiseClick
    Next
End Sub

Private Sub RaiseClick(sender As Object, e As EventArgs)
    RaiseEvent ControlClick(sender, e)
End Sub
然后到外面去看两件事:

Public Sub UserControl_click(sender As Object, e As EventArgs) _
                           Handles UserControl1.Click, UserControl1.ControlClick
    '...
End Sub

您能否解释一下,为什么您希望单击标签时的操作方式与单击表单背景时的操作方式相同?你的最后一句话让我很反感。你能解释一下为什么你希望点击标签时的行为与点击表单背景时的行为相同吗?你的最后一句话把我甩了。谢谢@SysDragon,这解决了我的问题。事实上,我只有6个用户控件,然后我可以处理每个事件。如果你有未知数量的用户控件来处理他们的事件,你能澄清一下如何处理吗?我不知道我是否理解你。您是指
UserControl
中的控件吗?无论如何,这里的代码是针对UserControl中数量不确定的控件的。如果您想处理不同用户控件的事件,只需使用函数添加处理程序,使用
handlers UC1.单击,UC2.单击,UC3.单击
等,或手动使用
AddHandler
方法。对不起,我想说的是,未知数量的用户控件UC1…UCn,uc1_load event中的代码片段实际上为用户控件内的每个控件分配了事件。不管怎样,您回答了我的问题,我可以通过为每个UserControl类型使用AddHandler方法添加处理程序来实现。非常感谢你!谢谢@SysDragon,这解决了我的问题。事实上,我只有6个用户控件,然后我可以处理每个事件。如果你有未知数量的用户控件来处理他们的事件,你能澄清一下如何处理吗?我不知道我是否理解你。您是指
UserControl
中的控件吗?无论如何,这里的代码是针对UserControl中数量不确定的控件的。如果您想处理不同用户控件的事件,只需使用函数添加处理程序,使用
handlers UC1.单击,UC2.单击,UC3.单击
等,或手动使用
AddHandler
方法。对不起,我想说的是,未知数量的用户控件UC1…UCn,uc1_load event中的代码片段实际上为用户控件内的每个控件分配了事件。不管怎样,您回答了我的问题,我可以通过为每个UserControl类型使用AddHandler方法添加处理程序来实现。非常感谢你!