• 代理实现两个窗口之间的通讯


    namespace DelegateTest
    {
        public partial class Form1 : Form
        {
            public delegate void ShowTextValue(string text);//代理
            public event ShowTextValue showText;//代理事件
            public Form1()
            {
                InitializeComponent();
                //把事件加入事件队列中
                showText += new ShowTextValue(SetText);
            }
             
            //开始代理
            public void StartDelegate(string str) {
                showText(str);
            }

            //设置文本框的值
            private void SetText(string str) {
                textBox1.Text = str;
            }

            //textBox1的TextChange事件
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                showText(textBox1.Text);
            }

            
           
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //在关闭窗口时 去掉代理事件,因为没加载一次窗体就代理了SetText方法,
                //如果不去掉,这个窗口开几次 ,SetText方法就会执行几次
                //事件队列中的方法会按顺序执行
                showText -= new ShowTextValue(SetText);
            }
        }
    }
     
    namespace DelegateTest
    {
        public partial class Form2 : Form
        {
            Form1 form1;
            public Form2()
            {
                InitializeComponent();          
            }

            private void SetText(string text)
            {
                textBox1.Text = text;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                form1 = new Form1();
                form1.showText += new Form1.ShowTextValue(SetText); 
                form1.Show();
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                form1.StartDelegate(textBox1.Text);
            }

            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                form1.showText -= new Form1.ShowTextValue(SetText);
            }        
        }
    }
    namespace DelegateTest
    {
      public  class Control
        {
            public delegate void SomeHandler(object sender, EventArgs e);
            public event SomeHandler someevent;

            public Control() {
                this.someevent += new SomeHandler(PrintStr);
                this.someevent += new SomeHandler(PrintInt);
            }
            public void ReadStr() {
                EventArgs e = new EventArgs();
                someevent(this,e);            
            }

            private void PrintStr(object sender, EventArgs e)
            {             
                MessageBox.Show("我就是陈太汉!,陈晓玲就是我老婆","代理");           
            }

            private void PrintInt(object sender, EventArgs e)
            {
                MessageBox.Show("你好,我就是陈太汉!,陈太汉就是我,哈哈哈哈哈""代理");          
          }
        }
    }
    namespace DelegateTest
    {
       public class Container
        {
           Control control = new Control();

           public Container() {
               control.someevent += new Control.SomeHandler(DelegateC);
               control.ReadStr();
           }

           private void DelegateC(object sender, EventArgs e)
           {
                
               MessageBox.Show("代理陈晓玲""代理");
           }
        }
    }
  • 相关阅读:
    选择下拉列表,出现不同数据,并计算
    获取td中的数据,保留两位小数重新赋值
    登录注册验证插件
    JS中的call、apply、bind方法详解
    超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等
    js实现冒泡排序
    C# 平方、开方、保留小数 运算
    T4模板循环生成插入语句
    JS数字金额转为大写金额
    Authentication method 'caching_sha2_password' not supported by any of the available plugins.
  • 原文地址:https://www.cnblogs.com/hlxs/p/2087992.html
Copyright © 2020-2023  润新知