• Vs2003多窗口下的复杂数据传递


      在多窗口编程中。各个窗口之间的数据传递是件伤神的事情,我以前用的最多的是在一个窗口建立一个公共字段,或创一个公共函数,将窗口的实例传递到下一个窗口,在另外一个窗口中可以对这个公共字段和公共函数进行操作,这样子的实现能满足大部的需求。例如在一个有进度条的操作中,我可以在子窗口中暴露一个对进度条操作的只写属性,每次父窗口改写进度值子窗口都用这个值去更新进度条,实现进度百分比的效果。
      今天在吕老师的Blog上看到了一个新的实现方法。以前的实现方法都是窗口与窗口之间的交换。结合的比较紧密,如果涉及的窗口比较多的话。一方发生更改。那涉及的代码量就比较大了。他的思路是在窗体与窗体之间增加一个中介。这样让窗体间的结合度降低,一旦需求改变,只需要改变中介了。达到了偷懒的目的。中介类的代码如下:
     

    using System;

    namespace Test
    {
       
    public delegate void  TextChangedHandler(string s);
        
    public class Result
        

            
    public string Result1;
            
    public string Result2;
            
    public event TextChangedHandler TextChanged;
            
    public void ChangedText(string s)
            
    {
                
    if(TextChanged!=null)
                
    {
                    TextChanged(s);
                }

            }

        }

          
    }

    这里面定义了一个委托和一个事件,还有两个事件,我们就是通过这个委托和事件达到数据传递的目的的。

    这是建立的父窗口,

    这是建立的子窗口,我们就在这里改变一些值,然后这些改动会在父窗口中自动的反映出来。

    这是父窗口的实现代码

      Result r=new Result();
            
    private void button1_Click(object sender, System.EventArgs e)
            
    {
                
                r.TextChanged
    +=new TextChangedHandler(this.TextChangedEve);
                Form2 frm
    =new Form2(r);
                frm.Show();
                

            }


            
    private void TextChangedEve(string s)
            
    {
              textBox2.Text 
    =r.Result1 +r.Result2 ;
               textBox1.Text 
    =s;
            }

    这代码里我们建立一个对象Result,并给事件订阅了处理程序,然后将Result对象的实例传给了Form2.在Fom2中我们需要重与构造函数,以获得对Result的引用。
     1private Result R;
     2        public Form2(Result r):this()
     3        {
     4          this.R=r;
     5        }

     6        private void button1_Click(object sender, System.EventArgs e)
     7        {
     8            R.Result1=textBox2.Text;
     9            R.Result2 =textBox3.Text;
    10            R.ChangedText(textBox1.Text.Trim());
    11        }
    这里触发了事件。最终结果将在父窗口中反应出来。运行结果:

  • 相关阅读:
    Spring Cloud Hystrix(熔断器)介绍及使用
    Fign入门学习
    Ribbon入门学习
    浅谈JSON5
    JSONObject 与 JSON 互转
    Windows下安装使用jmeter
    MongoDB 数据库高级进阶
    Mysq-l数据库下载以及安装(至安装成功cmd可访问)
    Mysql-数据库下载
    端口占用
  • 原文地址:https://www.cnblogs.com/xxm/p/440392.html
Copyright © 2020-2023  润新知