我创建了一个自定义用户控件,希望它像Button一样工作。
它现在有效,但是我有问题,当我在visual studio的设计器窗口中单击它时,它总是生成处理程序用户控件的Load事件的代码,但我希望visual studio handler能够默认处理它的click事件。
我该怎么做?
答案 0 :(得分:7)
非常感谢Udan
我找到了解决方案。 我只是这样声明,那么现在一切都好吗
[DefaultEvent("Click")]
public partial class FlatButton : UserControl
{
}
答案 1 :(得分:1)
在“属性”窗口中,您可以选择更改控件的默认事件。
首先,在表单中选择控件,然后查看属性窗口的顶部。
在“属性”窗口的工具栏上选择“事件”按钮,以在“属性”窗口中查看“事件”页面。向下滚动到Click事件,然后在框中输入Button_Click。选择ENTER键。
IDE将一个名为label_Click()的Click事件处理程序添加到代码中,并将其挂钩到表单上的每个标签。
在事件
答案 2 :(得分:0)
你应该去掉功能结构
public delegate void _func(your param);
然后取消你的活动
public event _func NewEvent;
你应该在你的usercontrol事件中调用它,如果你想在用户点击你的用户控件中的标签时运行这个事件,那么你应该添加这个:
private void lbl_click(object sender,EventArgs e){
if(this.NewEvent != null){
this.NewEvent(your param)
}
}
当您使用用户控件并将其添加到其他项目中时,您可以在属性 - >事件窗口中看到您的NewEvent
答案 3 :(得分:0)
我遇到了与设置默认Click事件有关的特殊情况。虽然@dexiang的自我解答是一个简单的解决方案,但我需要在内部处理click事件并提供外部默认事件。
对于我的用户控件,我有一个图片框和标签,需要处理单击事件,同时还要暴露整个控件的点击。
-----------------
| ------------- |
| |PictureBox | |
| ------------- |
| |
| ------------- |
| | Label | |
| ------------- |
-----------------
要完成此操作,我需要为默认的点击处理程序命名,其名称与Click
不同。我选择了[DefaultEvent("ControlClick")]
然后在InitializeComponent();
之后,在UserControl的构造函数中,我获得了控件,图片框和标签的单击事件处理程序:
this.Click += OnClick;
this.PictureBox1.Click += OnClick;
this.Label1.Click += OnClick;
我还通过以下方式公开了自定义事件:
public event EventHandler ControlClick;
click事件处理程序如下:
private void OnClick(object sender, EventArgs e)
{
// Invoke parent's button click handler if exists
ControlClick?.Invoke(sender, e);
//... code to process click...
希望这对其他人有所帮助,因为我最初尝试使用Click
默认名称。