0

我在处理事件和/或委托时遇到了问题。我看到了非常相似的问题,但我仍然不清楚真正的实现。因此,请在您回答时更具体一些,以便我可以尝试并最终通过我知道的代码来了解公共/自定义事件的创建/处理究竟是如何工作的。

我所拥有的是一个User Control简单的文本框和一个按钮,我需要使用文本框中的值更改数据库中的记录。我将这个控件用于许多表单,所以我需要知道我正在使用哪个实体,并且能够调用它自己的保存方法。click如果我可以使用我的按钮事件User Control然后调用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;
        }
    }
}

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

这是需要使用来自更具体的Click事件的形式之一,因为如果我理解正确,那么就有我必须订阅事件的地方:User ControlConstructor

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

UserControls.CommonControls.ChangeCode- 这就是我到达我User Control的名字的方式ChangeCode

4

1 回答 1

1

从您粘贴的内容来看,尚不清楚您是否向ChangeCode表单添加了控件。要使用控件及其事件和属性,首先必须为其创建新实例并将其添加到表单中。这个完成了:

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

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

ChangeCode1.CustomControlClickMe += new ClickMe(button2_Click);

您粘贴的代码 ( UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);) 不正确,原因如下:

  1. 从语法上讲,左侧表达式以 which 结尾,.这使得它不正确的赋值目标 ( UserControls.CommonControls.ChangeCode.)
  2. 未提供事件名称,仅提供控件名称(您需要以要分配的内容结束分配的左侧 - .CustomControlClickMe
  3. 您正在尝试将处理程序附加到类而不是对象
于 2013-03-20T09:11:39.213 回答