1

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

我在当前表单中实时添加了这个自定义用户控件。问题。当我单击按钮(位于用户控件内)时,我不知道如何更新当前表单中的事件。有人知道如何实现吗?

4

4 回答 4

2

如果通过实时添加此自定义用户控件意味着您是在运行时添加它而不是在设计时添加它并且我不知道如何更新事件您的意思是如何订阅此事件:

Event在您的用户控件中创建一个新的公共(例如YourEvent),并通过 raise 来处理按钮单击YourEvent

用于+=订阅您的Form.

yourControl.YourEvent += YourEventHandler;

我猜你使用的是 Visual Studio,所以只需键入yourControl.YourEvent +=并按TAB两次,Visual Studio 就会为你创建一个适当的事件处理程序方法。

于 2012-12-12T07:55:36.403 回答
1

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

于 2012-12-12T07:50:56.227 回答
1

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

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

于 2012-12-12T07:55:25.743 回答
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!";
}
于 2012-12-12T18:29:48.690 回答