zoukankan      html  css  js  c++  java
  • 委托事件实现更新窗体

    委托 和 事件在 .Net Framework中的应用非常广泛。 委托( Delegate ):是一种定义方法签名(只有方法的名字,没有方法体),可以与具有兼容的签名的任何方法关联。所谓兼容的方法,是指 这个方法和委托的方法签名具有相同的返回类型和参数。它和C或C++中的函数指针十分类似,或者说委托是高级的函数指针。它具有两大特点:面向对象,类型安全和可靠的。

    下面通过委托实现数据同步更新

    在需要操作的窗体中写入以下关键代码:

      //定义委托
      public delegate void DelegateTest(string ms);
      //定义委托对象
      public DelegateTest newDelegate;
      private void button1_Click(object sender, EventArgs e)
      {
      //使用委托调用委托方法
      newDelegate(this.textBox1.Text);
      }

    在需要数据实时更新的窗体中写入以下关键代码

      //创建需要委托的方法
      public void Update(string s)
      {
      this.textBox1.Text = s;
      }
      private void button1_Click(object sender, EventArgs e)
      {
      Form2 f2 = new Form2();
      //将委托方法传递给委托对象
      f2.newDelegate = Update;
      f2.Show();
      }

    事件:就是当对象发生某些事情时,向该对象的客户提供通知的一种方法。.NET的事件模型建立在委托机制之上,它实现了对委托的封装。因此它是一种特殊类型的委托,更确切的说是一个多播委托(MultiDelegate)。意思是指可以将多个事件处理函数委托交由一个事件进行托管,即当事件引发时,会调用其中的每一个委托函数。较好地理解委托和事件在开发中会如虎添翼,下面通过自定义事件实现窗体间数据的同步刷新

      //定义委托
      public delegate void DelegateTest(string ms);
      //定义委托事件
      public DelegateTest newEvent;
      private void button1_Click(object sender, EventArgs e)
      {
      //使用委托调用委托方法  
        newEvent(this.textBox1.Text);
      }
      //创建需要委托的方法
      public void Update(string s)
      {
      this.textBox1.Text = s;
      }
      private void button1_Click(object sender, EventArgs e)
      {
      Form2 f2 = new Form2();
      //将委托方法传递给委托对象 注意事件赋值方式
      f2.newEvent += Update;
      f2.Show();
      }

    现在大家发现委托和事件都能很好的实现数据的同步更新。但是在实际操作中推荐大家使用事件。为什么呢?大家发现普通的委托和多播委托的委托对象可以在外部赋值,而事件不能。与普通的委托相比,事件可以避免委托对象被外部随意修改。因此安全性更好。虽然多播委托可以实现事件。但是推荐使用事件的方式。

  • 相关阅读:
    IntelliJ IDEA 2018.3 升级功能介绍
    Spring 自动装配及其注解
    在IDEA中实战Git-branch
    IntelliJ IDEA 新版发布:支持CPU火焰图,新增酷炫主题
    java中URL和File的相互转化
    写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
    输入一行字符,分别统计出其中英文 字母、空格、数字和其它字符的个数
    输入两个正整数m和n,求其最大公约数和最小公倍数。
    一个数如果恰好等于它的因子之和,这个数就称为 "完数 "
    判断101-200之间有多少个素数,并输出所有素数。
  • 原文地址:https://www.cnblogs.com/haorui/p/3608814.html
Copyright © 2011-2022 走看看