zoukankan      html  css  js  c++  java
  • Winform开发之窗体传值

    Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法

    1、构造函数传值,但这种方法是单向的(推荐)

    上代码,先传值

    1 private void button2_Click(object sender, EventArgs e)
    2         {
    3             Form3 fr3 = new Form3("要传的值啊");
    4             fr3.ShowDialog();
    5         }

    接值,对了,这里需要重载一个Form3的构造函数,然后将拿到的值显示出来

    1 public Form3(string canshu)
    2         {
    3             InitializeComponent();
    4             label1.Text = canshu;
    5         }

    效果图,就是这么简单

    2、静态变量传值(不推荐)

    可以将静态变量申明在你需要的地方,比如一个单独类,或者Form中,比如我们在这里申明在Form2中

     public static string xvalue;
    1 private void button2_Click(object sender, EventArgs e)
    2         {
    3             xvalue = "要传的值啊xvalue";
    4             Form3 fr3 = new Form3();
    5             fr3.ShowDialog();
    6         }

    先给赋值,然后在Form3中取值

    1 public Form3()
    2         {
    3             InitializeComponent();
    4             label1.Text = Form2.xvalue;//Form2实际也是个class,直接取静态值即可,如果静态变量xvalue定义在其他类中,即将Form2替换即可            
    5         }

    效果图上

    3、通过共有属性传值

    首先在要打开的Form中创建一个共有属性,然后在调用窗口赋值即可。比如下面Form2启动Form3,即给Form3的yvalue传值

    (1)在Form3中定义共有属性

     1 public string yvalue {
     2             get 
     3             {
     4                 return label1.Text.ToString();
     5             }
     6             set 
     7             {
     8                 label1.Text = value;
     9             }
    10         }

    (2)Form2中启动Form3,并传值

    1 private void button2_Click(object sender, EventArgs e)
    2         {           
    3             Form3 fr3 = new Form3();
    4             fr3.yvalue = "要传的值啊";
    5             fr3.ShowDialog();
    6         }

    4、通过Owner属性传值

    (1)在调用者Form2中申明一个公有变量,并赋值,设置需要启动的Form3的Owner

    1 public string xvalue;
    2         private void button2_Click(object sender, EventArgs e)
    3         {
    4             xvalue = "Form2要传的值";
    5             Form3 fr3 = new Form3();
    6             fr3.Owner = this;
    7             fr3.ShowDialog();
    8         }

    (2)启动窗体Form3中取值

    1 private void Form3_Load(object sender, EventArgs e)
    2         {
    3             Form2 fr2 = (Form2)this.Owner;
    4             label1.Text = fr2.xvalue;
    5         }

    这种方法实际是将Form2传给了Form3,因此Form3可以取到Form2的所有公有变量和属性。

    5、委托传值(推荐)

    委托传值主要用在子窗体给父窗体传值上,即上文的Form3给Form2传值

    (1)先在Form3中申明委托

    1 public delegate void PutHandler(string text);
    2         public PutHandler putTextHandler;//委托对象
    3         private void button1_Click(object sender, EventArgs e)
    4         {
    5             if (putTextHandler != null)
    6             {
    7                 putTextHandler(textBox1.Text.ToString());
    8             }
    9         }

    (2)在Form2中绑定委托事件

     1 public void getValue(string strV)
     2           {
     3              this.textBox1.Text = strV;
     4          }
     5        
     6         private void button1_Click(object sender, EventArgs e)
     7         {
     8             Form3 fr3 = new Form3();
     9             fr3.putTextHandler = getValue;
    10             fr3.ShowDialog();          
    11         }

     注意:

    委托和事件是不一样的,你最后一个示例。
    if (putTextHandler != null)
    {
    putTextHandler(textBox1.Text.ToString());
    }
    上面这样做是有bug的。
    最好的做法是,是先用临时变量缓存putTextHandler ;
    然后在处理,
    否则你判断!=null成立
    但是马上在其他地方-=的话,程序就出错了
    -=你是不知道会由谁调用的
  • 相关阅读:
    长连接与短连接
    服务器配置tomact service
    数据库权限表设计
    VPS搭建离线下载服务器——后网盘时代
    Unix socket的准备(一)
    LeetCode 650
    C++11获取线程的返回值
    柔性数组成员——不定长的数据结构
    看懂类图——UML类图基础
    Java类初始化顺序
  • 原文地址:https://www.cnblogs.com/SJP666/p/4810114.html
Copyright © 2011-2022 走看看