用户控制事件处理程序订阅
本文关键字:程序 事件处理 控制 用户 | 更新日期: 2023-09-27 18:29:44
我有一个带有用户控件的windows窗体应用程序。我试图让UC调用主窗体上的函数,但当我添加UC时,主窗体看不到公共事件。
我的UC是这样的:
public partial class uctlLogin: UserControl
{
public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public event ButtonClickedEventHandler OnUserControlButtonClicked;
public uctlLogin()
{
InitializeComponent();
btnLogin.Click += new EventHandler(OnButtonClicked);
}
private void OnButtonClicked(object sender, EventArgs e)
{
if (OnUserControlButtonClicked != null)
OnUserControlButtonClicked(this, e);
}
}
我的表单代码是:
public partial class frmMain : Form
{
UserControl uctlLogin1 = new TabletUserControls.uctlLogin();
public frmMain()
{
InitializeComponent();
uctlLogin1.OnUserControlButtonClicked += new EventHandler(OnUCButtonClicked);
}
private void OnUCButtonClicked(object sender, EventArgs e)
{
MessageBox.Show("Horray!");
}
private void frmMain_Load(object sender, EventArgs e)
{
this.Controls.Add(uctlLogin1);
}
}
问题出在这一行:
uctlLogin1.OnUserControlButtonClicked += new EventHandler(OnUCButtonClicked);
生成以下消息:
"System.Windows.Forms.UserControl"不包含"OnUserControlButtonClicked"的定义,也不包含扩展方法"OnUserControlButtonClicked"接受类型为的第一个参数找不到"System.Windows.Forms.UserControl"(是否缺少使用指令还是程序集引用?)
我试着把UC放在同一个项目中,在一个单独的项目中创建UC,然后添加一个引用。在谷歌上搜索了几个小时后,我被卡住了。知道我在这里错过了什么吗?
顺便说一句,我使用的是针对.Net Framework 4.5的VS2012。
这是因为在frmMain
中,您将uctlLogin1
声明为UserControl
,而不是uctlLogin
。类型UserControl
没有OnUserControlButtonClicked
事件,编译器也不知道uctlLogin1
是uctlLogin
的实例,因为您将其声明为UserControl
。只要指定uctlLogin1
的实际类型,它就会正常工作。