[英]How to call a method on another class using delegates?
假設我有兩種形式。 當我按下第一個按鈕時,會顯示第二個按鈕。 但是,我希望能夠通過按下它上的按鈕來關閉第二個,但它應該在第一個上觸發一種方法,該方法負責關閉第二個窗口。 它必須使用委托和事件來完成。 我該怎么做? 謝謝您的幫助。
你的問題不是很清楚..可能對你有幫助。
// Form1 is the 1st form or main form
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//creat a sample object of FormEXt
var form = new FormExt();
//subscribe its CustomClose Event
form.CustomClose += new FormExt.CloseMeDelegate(form_CustomClose);
//set the text
form.Text = "Samplee 01";
//show the form
form.Show();
//repeat a again
form = new FormExt();
form.CustomClose += new FormExt.CloseMeDelegate(form_CustomClose);
form.Text = "Samplee 02";
form.Show();
}
void form_CustomClose(Form form)
{
//get the form show the titile
MessageBox.Show("Going to Close" + form.Text);
//close the form
form.Close();
}
}
//second form with a button
public class FormExt : Form
{
//creat a delegate which takes form as input
public delegate void CloseMeDelegate(Form form);
//creat event from delegeate set it fake delegate in order to avoid null excpetion
public event CloseMeDelegate CustomClose = delegate {
};
public FormExt() {
//creat a button
var button = new Button() { Text = "Click" , Top = 10 , Left=10 };
//grab button click event
button.Click += delegate
{
//invoke custome close event
CustomClose(this);
};
//add button on the form
this.Controls.Add(button);
}
}
在您的第二個窗口中,聲明一個在窗口想要關閉時引發的事件:
// ## Second window ##
public delegate void IssueCloseDelegate(object sender, EventArgs e);
public event IssueCloseDelegate IssueClose;
當按下關閉按鈕時,引發此事件:
// ## Second window, button click handler
if (IssueClose != null)
IssueClose(this, EventArgs.Empty);
在第一個窗口中實例化窗口時,注冊事件並處理它:
// ## First window ##
//some method
var newWindow = new SecondWindow();
newWindow.IssueClose += NewWindow_IssueClose;
newWindow.Show();
//...
private void NewWindow_IssueClose(object sender, EventArgs e)
{
var closedWindow = (SecondWindow)sender;
closedWindow.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.