【问题标题】:How to call a method on another class using delegates?如何使用委托调用另一个类的方法?
【发布时间】:2015-11-17 13:27:58
【问题描述】:

假设我有两种形式。当我按下第一个按钮时,会显示第二个按钮。但是我希望能够通过按下一个按钮来关闭第二个,但它应该在第一个负责关闭第二个窗口的方法上触发一个方法。它必须使用委托和事件来完成。我该怎么做?感谢您的帮助。

【问题讨论】:

  • 关闭按钮在第二个表单还是第一个表单上?
  • 不,2号。但是第一个有关闭第二个的方法。

标签: c# wpf silverlight events delegates


【解决方案1】:

你的问题不太清楚..可能对你有帮助。

 // 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);

        }

    }

【讨论】:

    【解决方案2】:

    在您的第二个窗口中,声明一个在窗口想要关闭时引发的事件:

    // ## 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2015-02-05
      • 2018-04-27
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多