[英]C# Windows Form User Control Not Recognized by Calling Form
我正在用两个按钮编写一个简单的用户控件:保存和取消。 我认为它认为没有订阅者,因为它在我在代码中指示的位置始终为null。 请帮忙。
这是用户控件的代码:
public partial class SaveCancelButtons : UserControl
{
public delegate void SaveClickedHandler();
public delegate void CancelClickedHandler();
public SaveCancelButtons()
{
InitializeComponent();
}
public event SaveClickedHandler SaveClicked;
public event CancelClickedHandler CancelClicked;
protected virtual void OnSaveClicked()
{
if (SaveClicked != null) <<<<----- ALWAYS NULL
{
SaveClicked(); // Notify Subscribers
}
}
protected virtual void OnCancelClicked()
{
if (CancelClicked != null) <<<<----- ALWAYS NULL
{
CancelClicked(); // Notify Subscribers
}
}
private void btnSave_Click(object sender, System.EventArgs e)
{
OnSaveClicked();
}
public void btnCancel_Click(object sender, EventArgs e)
{
OnCancelClicked();
}
}
这是我的称呼方式:
public partial class TestForm : Form
{
public TestForm()
{
// declare and subscribe to the user control
SaveCancelButtons scb = new SaveCancelButtons();
scb.SaveClicked += UC_SaveClicked;
scb.CancelClicked += UC_CancelClicked;
this.Controls.Add(scb);
InitializeComponent();
}
private void UC_SaveClicked()
{
MessageBox.Show("Save!");
}
private void UC_CancelClicked()
{
MessageBox.Show("Cancel");
}
}
您正在尝试在这里混合使用代表和事件。 如果只需要单击用户控件按钮时要在窗体中调用的方法,则在用户控件中声明事件并在窗体中注册回调函数。 我对您的代码进行了更改。 此代码将显示用户控件中单击按钮的对话框
public partial class SaveCancelButtons : UserControl
{
public delegate void SaveClickedHandler();
public delegate void CancelClickedHandler();
public SaveCancelButtons()
{
InitializeComponent();
}
public event EventHandler SaveClicked;
public event EventHandler CancelClicked;
protected virtual void OnSaveClicked()
{
EventHandler handler = SaveClicked;
if (SaveClicked != null) //
{
handler(this,new EventArgs()); // Notify Subscribers
}
}
protected virtual void OnCancelClicked()
{
EventHandler handler = CancelClicked;
if (CancelClicked != null) // <<<<
{
handler(this,new EventArgs()); // Notify Subscribers
}
}
private void btnSave_Click(object sender, EventArgs e)
{
OnSaveClicked();
}
private void btnCancel_Click(object sender, EventArgs e)
{
OnCancelClicked();
}
}
你的形式改变
public partial class TestForm : Form
{
public TestForm()
{
// declare and subscribe to the user control
SaveCancelButtons scb = new SaveCancelButtons();
scb.SaveClicked += Scb_SaveClicked; ;
scb.CancelClicked += Scb_CancelClicked; ;
this.Controls.Add(scb);
InitializeComponent();
}
private void Scb_CancelClicked(object sender, EventArgs e)
{
MessageBox.Show("Cancel");
}
private void Scb_SaveClicked(object sender, EventArgs e)
{
MessageBox.Show("Save!");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.