我有一个包含3个标签的UserControl.我想为其添加一个事件,该事件在其中一个标签的文本更改时发生。
我正在使用Visual Studio 2010
最新回答
- 2021-1-121 #
- 2021-1-122 #
首先,应在用户控件中声明一个事件,例如:
public event EventHandler TextOfLabelChanged;
然后,您必须在运行时调用绑定到事件(如果有)的回调函数。您可以通过处理标签的TextChanged事件来做到这一点:
public void LabelTextChanged(object sender,EventArgs e) { if(TextOfLabelChanged!=null) TextOfLabelChanged(sender,e); }
如果愿意,您可以拥有自己的EventArgs对象。
在代码中的某个位置,应将标签TextChanged事件绑定到此方法,如下所示:
_myLabel.TextChanged+=LabelTextChanged;
- 2021-1-123 #
编译错误,它在第二行显示:"预期的类,委托,枚举,接口或结构"似乎与"事件..."有关。
这两行必须在类声明的内部。
public delegate void TextChangedEventHandler(object sender, EventArgs e); public event TextChangedEventHandler LabelTextChanged;
- 2021-1-124 #
有一种非常简单的方法!
在UserControl表单上:
将属性更改为公开以在任何地方访问
在使用UserControl的主窗体上:
.5:在
using
中 区域添加using userControl1=UserControl.userControl1
1。将" Laod"事件添加到您的UserControl中:
this.userControl1.Load += new System.EventHandler(this.userControl1_Load);
2。在userControl1_Load中:
private void userControl1_Load(object sender, EventArgs e) { (sender as UserControl1).label1.TextChanged += label1_TextChanged; //add a 'TextChanged' event to the label1 of UserControl1 OR use direct cast: ((UserControl1) sender).label1.TextChanged += label1_TextChanged; }
3。在label1_TextChanged中:
private void label1_TextChanged(object sender, EventArgs e) { //do whatever you want }
- 2021-1-125 #
public delegate void TextChangedEventHandler(object sender, EventArgs e); public event TextChangedEventHandler LabelTextChanged; // ... protected void MyTextBox_TextChanged(object sender, EventArgs e) { if (LabelTextChanged != null) { LabelTextChanged(this, e); } }
相关问题
- c#:同时播放两个声音c#winformsaudioplaybacksimultaneous2021-01-12 00:56
- C#winForms中的ToggleButtonc#winformsbutton2021-01-12 00:54
- c#:如何解决IE webBrowser控件中的内存泄漏?c#winformsmemoryleakswebbrowsercontrol2021-01-11 23:27
- c#:设置TabPage标头颜色c#winformscolorsheadertabcontrol2021-01-11 04:59
- c#:PictureBox问题c#netwinformspicturebox2021-01-11 04:56
首先,您需要在类中声明事件(以及方法和构造函数):
然后,您需要创建一种方法来处理各个标签的
TextChanged
事件。在某个地方,可能在控件的构造函数中,您需要订阅标签的
TextChanged
事件。现在为
HandleLabelsTextChanged
方法.我们可以养LabelsTextChanged
直; 但是,.NET框架设计指南指出,创建OnEventName
是最佳实践 受保护的虚拟方法来为我们引发事件.这样,继承类可以通过覆盖OnEventName
来"处理"事件 方法,结果比订阅事件要好一些.即使您认为您永远也不会超越OnEventName
方法,无论如何都要养成习惯,因为这可以简化事件的产生过程。这是我们的
OnLabelsTextChanged
:我们必须检查是否为空,因为没有订阅者的事件为空.如果我们尝试引发null事件,则会得到一个
NullReferenceException
.请注意,我们复制了事件的EventHandler
在检查它是否为null并引发事件之前将其转换为局部变量.如果我们改为这样做:我们将在无效检查和事件引发之间有一个竞争条件.如果恰好发生在事件引发之前,但在我们检查为空之后,事件的订阅者取消了订阅,则将引发异常.您通常不会遇到此问题,但是最好养成以安全方式编写它的习惯。
Edit: 这就是
public event EventHandler LabelsTextChanged;
行应放置:以下是事件设计的框架设计指南,供您进一步阅读。