如何制作“点击事件”是Visual Studio中用户控件的默认操作

时间:2014-03-24 04:43:44

标签: c# user-controls custom-controls

我创建了一个自定义用户控件,希望它像Button一样工作。

它现在有效,但是我有问题,当我在visual studio的设计器窗口中单击它时,它总是生成处理程序用户控件的Load事件的代码,但我希望visual studio handler能够默认处理它的click事件。

我该怎么做?

4 个答案:

答案 0 :(得分:7)

非常感谢Udan

我找到了解决方案。 我只是这样声明,那么现在一切都好吗

[DefaultEvent("Click")]
public partial class FlatButton : UserControl
{
}

答案 1 :(得分:1)

在“属性”窗口中,您可以选择更改控件的默认事件。

  • 首先,在表单中选择控件,然后查看属性窗口的顶部。

  • 在“属性”窗口的工具栏上选择“事件”按钮,以在“属性”窗口中查看“事件”页面。向下滚动到Click事件,然后在框中输入Button_Click。选择ENTER键。

Image of Properties window

  • 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默认名称。