飞道的博客

c#委托与事件完成方法的传递与参数的传递案例

209人阅读  评论(0)

简单说一下委托的含义

委托就是可以将别的类中的方法直接传递到委托所在类中使用的方法,具体操作步骤如下。
搭建界面如下:

具体操作如下//form1全部代码

namespace 委托
{
    public partial class Form1 : Form
    {
        
        Form2 form2 = new Form2();
       
        public Form1()
        {
           InitializeComponent();
            form2.Show();
            //1第三步:将需要委托的方法绑定在委托上
            Form2.myVoidtest += new myVoid(returnF1txtBox);

            //2第三步:将需要委托的方法绑定在委托上
            Form2.myParamtest += new myParam(setF1txtBox);
        }
        //获得窗体1的值需要用到的被委托的方法
        public void returnF1txtBox()//无值类型,所以定义的委托也为无值类型
        {//此处有废话繁琐之意,但不用在乎内容此处只是表达,能直接将方法传递
            form2.F2txtBox.Text = F1txtBox.Text;
        }

        //向窗体1传值需要用到的被委托的方法
        private void setF1txtBox(string txt)//需值类型string的txt,所以定义的委托也为string txt
        {
            F1txtBox.Text = txt;
        }
       
    }
}

//form2全部代码

namespace 委托
{
    //1、委托传递方法(方法不使用参数)
    //1第一步:在想要得到方法或参数的窗体定义委托
    //委托可在类外,命名空间内
    public delegate void myVoid();

    //2、委托传递参数(其实不是把本窗体参数传到另一个窗体,而是用委托将另一个窗体需要用到此参数的方法拿过来,在本窗体将参数传进去)
    //2第一步:在想要得到方法或参数的窗体定义委托
    //委托的方法中需要用到的参数,也是委托中“传递”的参数类型与参数名
    public delegate void myParam(string text);
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        //1第二步:定义委托所对应的事件,相当于将委托中的方法或者值赋值给定义的具体事件
        //完成第三步后,事件才会具有内容,在此窗体中可以直接使用
        public static event myVoid myVoidtest;
        //获得窗体1的值
        private void btn1_Click_1(object sender, EventArgs e)
        {
            myVoidtest();
        }

        //2第二步:定义委托所对应的事件,相当于将委托中的方法或者值赋值给定义的具体事件
        //完成第三步后,事件才会具有内容,在此窗体中可以直接使用
        public static event myParam myParamtest;
        //向窗体1传值
        private void btn2_Click(object sender, EventArgs e)
        {
            //因为委托的方法需要用到string的txt,myParamtest相当于方法的实例,所以使用时需要传入string类型值F2txtBox.Text
            myParamtest(F2txtBox.Text);
        }
    }
}

转载:https://blog.csdn.net/mlxg99999/article/details/116750390
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场