C#之利用委托和事件实现参数传递

C#之利用委托和事件实现参数传递

关于委托和事件的个人理解就是,委托就是快递员,事件就是信纸,事件里的程序就是信的内容。其实现过程就是,快递员邮递写好的信,即事件通过委托向外传递,至于向哪传递,那就要看哪里注册了这个事件。在编写C#程序时需要用到委托和事件来传递一些参数,这里就简单总结一下委托和事件传参的简单使用:

假设:在一个窗体中创建了一个用户控件uc1,需要把uc1中的某个int类型的参数传递给主窗体并在textBox中显示

用户控件uc1:

//声明一个委托
public delegate void PassIntToFrmMainEventHandler(int number);
//声明一个要委托的事件
public event PassIntToFrmMainEventHandler  PassIntToFrmMainEvent;

int number = 1000;//这里是随便声明一个int参数

//单击button传递
private void button1_Click(object sender, EventArgs e)
{
     PassIntToFrmMainEvent(number);
}

Form窗体:

        public Form1()
        {
           
            InitializeComponent();
            //注册事件
            uc11.PassIntToFrmMainEvent += new uc1.PassIntToFrmMainEventHandler(ReceiveInt);
        }

        private void ReceiveInt(int number)
        {
            //将uc1中传来的Int参数在textBOX中显示
            textBox1.Text = number.ToString();
        }

注意:声明的委托中是什么类型的参数就必须传递什么类型的参数,也就是说,委托的类型必须与事件中传递的类型一致,即发水果类快递必须装水果不能装衣服!

除了委托参数,还可以直接委托某一事件,例如:

在uc1控件中:

        public delegate void  UC1TextboxChanageHandler(object sender,TextChangeEventarges e);
        public event UC1TextboxChanageHandler TextChangeEvent;

        //继承事件基类的类
        public class TextChangeEventarges:EventArgs 
        {
            private readonly string txt;
            public TextChangeEventarges(string txt) 
            {
                this.txt = txt;
            }
            public string GetTxt 
            {
                get 
                {
                    return txt;
                }
            }
        }

        public UCForm1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (this.TextChangeEvent != null) 
            {
                this.TextChangeEvent(this, new TextChangeEventarges(this.textBox1.Text));
            
            }
        }

在窗体中:

        public FormMain()
        {
          
            InitializeComponent();
           
            this.uc1.TextChangeEvent += new UCForm1.UC1TextboxChanageHandler(uc1_TextChangeEvent);
            
        }

        void uc1_TextChangeEvent(object sender, UCForm1.TextChangeEventarges e)
        {
             textBox1.Text = e.GetTxt;
        }

猜你喜欢

转载自blog.csdn.net/Kevin_Sun777/article/details/109728588