在C#WinForms中,我创建了一个用户控件,为了这个例子,让我们假设在其中我创建了一个按钮,当我点击它时它会触发一个事件。
我以当前的形式实时添加此自定义用户控件。问题。当我单击按钮(在用户控件内)时,我不知道如何更新当前表单中的事件。任何人都知道如何实现它?
答案 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!";
}