我有一个带有用户控件的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,然后添加对它的引用。谷歌搜索了几个小时后,我被卡住了。知道我在这里缺少什么吗?
BTW,我正在使用针对.Net Framework 4.5的VS2012。
答案 0 :(得分:3)
这是因为在frmMain
中,您将uctlLogin1
声明为UserControl
,而不是uctlLogin
。类型UserControl
没有OnUserControlButtonClicked
事件,并且编译器不知道uctlLogin1
是uctlLogin
的实例,因为您声明了它为UserControl
。只需指定uctlLogin1
的实际类型,它就能正常工作。