如何触发当前班级无法触及的事件?

时间:2012-12-12 07:47:24

标签: c# winforms events eventtrigger

在C#WinForms中,我创建了一个用户控件,为了这个例子,让我们假设在其中我创建了一个按钮,当我点击它时它会触发一个事件。

我以当前的形式实时添加此自定义用户控件。问题。当我单击按钮(在用户控件内)时,我不知道如何更新当前表单中的事件。任何人都知道如何实现它?

4 个答案:

答案 0 :(得分:2)

如果通过实时添加此自定义用户控件,则表示您是在运行时添加它而不是设置时间,并且我不知道如何更新事件您的意思是如何订阅此活动:

在您的用户控件中创建一个新的公开Event(例如YourEvent),并通过提升YourEvent来处理按钮点击。

使用+=Form内订阅该活动。

yourControl.YourEvent += YourEventHandler;

我猜您使用Visual Studio,因此只需键入yourControl.YourEvent +=并按 TAB 两次,Visual Studio将为您创建适当的事件处理程序方法。

答案 1 :(得分:1)

您不需要引发事件(至少根据提供的问题),您需要将所有在事件上执行的代码放入一个public函数,并从“外部” “,只需调用该功能。

答案 2 :(得分:1)

在usercontrol上添加一个名为ButtonClicked的自定义事件,在单击该按钮时触发它,并在表单中添加一个事件处理程序来处理用户控件的ButtonClicked事件。

基本上,您从用户控制的角度将事件暴露给外界。

答案 3 :(得分:0)

这是我第一次提供答案,所以我希望我做得对。你所有的其他答案都得到了帮助,但我觉得它们含糊不清(可能是一个模糊的问题)。我试图尽可能更清楚地提供解决方案。如果出现问题,请随意改进,并告诉我是否应将其标记为“已接受”。感谢大家的支持!

首先,在UserControl中我创建了一个按钮,并将Button1Click委托给它:

this.button1.Location = new System.Drawing.Point(25, 17);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(95, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Click";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1Click);

稍后在UserControl的源代码中:

void Button1Click(object sender, EventArgs e)
{
}

现在,在MainForm设计器中,我添加了一个TextBox(用于测试结果)和我的自定义UserControl。在最后一行,我从UserControl观察事件,当它被触发时,它从MainForm内部调用Button1Click:

this.textBox1.Location = new System.Drawing.Point(12, 151);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(202, 20);
this.textBox1.TabIndex = 1;

this.uControl1.Location = new System.Drawing.Point(12, 12);
this.uControl1.Name = "uControl1";
this.uControl1.Size = new System.Drawing.Size(304, 95);
this.uControl1.TabIndex = 0;
this.uControl1.button1.Click += new System.EventHandler(this.Button1Click);

因此Text属性已更改。

void Button1Click(object sender, EventArgs e)
{
   this.textBox1.Text = "Hurrah!";
}