簡體   English   中英

如何使用委托調用另一個類的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM