Windows窗体-使用公共事件为窗体订阅用户控件事件

本文关键字:事件 窗体 用户 控件 Windows | 更新日期: 2023-09-27 18:04:54

在处理事件和/或委托时,我遇到了一个问题。我看到了非常类似的问题,但我仍然不清楚真正的实现。所以请当你回答更具体,所以我可以尝试并最终了解如何创建/处理公共/自定义事件的工作通过做它在一个代码我知道。

我所拥有的是一个User Control,这只是一个文本框和一个按钮,我需要使用文本框中的值更改数据库中的记录。我在很多表单中使用这个控件所以我需要知道我在使用哪个实体并能够调用它自己的save方法。如果我可以从我的User Control中使用按钮的click事件,然后调用当前形式的Save()方法,那么做所有这些将更容易。

这是我的用户控件:

namespace UserControls.CommonControls
{
    public delegate void ClickMe(string message);
    public partial class ChangeCode : UserControl
    {
        public event ClickMe CustomControlClickMe;
        public ChangeCode()
        {
            InitializeComponent();
        }
        private void btnChange_Click(object sender, EventArgs e)
        {
            if (CustomControlClickMe != null)
                CustomControlClickMe("Hello");
           //ToDo fill
            //MessageBox.Show("To Do: Write the busieness logic.");
        }
        public void SetTextBoxMask(MaskedTextBox txtBox)
        {
            txtChange.Mask = txtBox.Mask;
        }
    }
}

我发布了我最后一次尝试和实现我需要的东西。

这是需要使用User Control中的Click事件的表单之一更具体地说,是Constructor因为如果我没理解错的话,我必须在这里订阅事件:

public MaterialEdit()
        {
            InitializeComponent();
            UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);
        }

UserControls.CommonControls.ChangeCode -这就是我如何到达我的User Control它被命名为ChangeCode

Windows窗体-使用公共事件为窗体订阅用户控件事件

从您粘贴的是不清楚您添加ChangeCode控件到您的表单。要使用控件及其事件和属性,首先必须为其创建新实例并将其添加到表单中。这样做:

    在设计器中,通过将控件从工具箱拖到窗体
  • 在代码编辑器中,通过调用控件构造函数并向控件集合中添加新对象

只有这样才能处理该对象的事件。假设您将ChangeCode控件放到一个窗体中,Visual Studio将其命名为ChangeCode1。您可以像这样将一个已处理的事件附加到CustomControlClickMe:

ChangeCode1.CustomControlClickMe += new ClickMe(button2_Click);

你粘贴的代码(UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);)是不正确的,有几个原因:

  1. 语法上,左侧表达式以.结尾,这使得它不正确的赋值目标(UserControls.CommonControls.ChangeCode.)
  2. 不提供事件名称,只提供控件名称(您需要在分配的左侧结束您想要分配的内容- .CustomControlClickMe)
  3. 您正在尝试将处理程序附加到类而不是对象