C# 窗体间传值

原创 2018年04月16日 16:58:17

C# 窗体间传值

窗体控件都是私有变量,不能直接进行传值。
本文主要介绍两种窗体间传值的方法,通过事件或委托进行传值。

通过事件传值

目标

在父类窗体和子类窗体中定义一个TextBox和按钮;
在父类窗体中点击按钮将字符串输出到子类窗体;
在子类窗体中点击按钮将字符串输出到父类类窗体;
窗口传值

定义一个消息类

该消息类继承EventArgs类

public class FrmEventArgs:EventArgs
{
    string _myString;
    public string MyString
    {
        get { return _myString; }
        set { _myString = value; }
    }
}

父类窗口代码编写

public event EventHandler TranValue;//定义事件
private void button1_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    string Value = textBox1.Text.ToString();
    this.TranValue += new EventHandler(frm.ChangeValue);//绑定事件,传出值
    frm.TranValue += new EventHandler(ChangeValue);//绑定事件,传回值
    FrmEventArgs FrmArgs = new FrmEventArgs();//定义消息
    if (textBox1.Text != null)
    {
        FrmArgs.MyString = textBox1.Text;
        TranValue(this, FrmArgs);//事件发生
    }
    frm.ShowDialog();
}
//传回消息时,处理函数
public void ChangeValue(object sender, EventArgs e)
{
    FrmEventArgs args = e as FrmEventArgs;
    textBox1.Text = args.MyString;
}

子类代码

public event EventHandler TranValue;//定义事件
private void button1_Click(object sender, EventArgs e)
{
    FrmEventArgs FrmArgs = new FrmEventArgs();//定义消息
    if (textBox1.Text != null)
    {
        FrmArgs.MyString = textBox1.Text;
        TranValue(this, FrmArgs);//消息发生
    }
    this.Close();
}
//事件处理函数
public void ChangeValue(object sender, EventArgs e)
{
    FrmEventArgs args = e as FrmEventArgs;
    textBox1.Text = args.MyString;
}

通过委托传值

实际上就是将父类窗体的函数地址给子类窗体,子类窗体要传回值时,通过地址找到父类函数。

父类代码

private void button1_Click(object sender, EventArgs e)
{
    if(textBox1.Text != null)
    {
        Form2 frm = new Form2();
        frm.ChangeValue(textBox1.Text, ChangeValue);
        frm.ShowDialog();
    }
}
public void ChangeValue(string str)
{
    textBox1.Text = str;
}

子类代码

public delegate void MyDelegate(string str);
public MyDelegate myDelegate;
private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text != null)
    {
        myDelegate(textBox1.Text);
        this.Close();
    }
}
public void ChangeValue(string str, MyDelegate myDele)
{
    textBox1.Text = str;
    myDelegate = myDele;
}

结束

版权声明: https://blog.csdn.net/supersandrew/article/details/79963035

C#Winform窗体与界面设计

-
  • 1970年01月01日 08:00

C# Winfrom窗体之间传值

有任何错误之处请多指正。 多个WinForm窗体之间需要进行数据的传递,如何进行传递,如何更好的进行传递。 窗体之间传值有五种方式(重点说委托) 1.使用构造函数进行实例化时进行传值(无demo); ...
  • kang_xuan
  • kang_xuan
  • 2017-07-29 21:58:37
  • 320

C#窗体间传值的方法总结.txt

  • 2010年08月20日 12:30
  • 7KB
  • 下载

C#利用委托和事件在窗体间传值问题

用静态变量和静态方法也可是现实在窗体间相互传值,但是有时候那些变量和方法未必能弄成静态的。 所以窗体间传递数值莫过于使用委托和事件了。 现有两个窗体form1,form2,它们都有分别有一个tex...
  • happythomas
  • happythomas
  • 2014-06-18 14:30:56
  • 1126

C# 利用委托实现窗体间传值

图文详解C#窗体间传递数据 ——窗口1若干TextBox中的数据,传递到窗口2中的ListView 功能描述:主窗体有一ListView控件和一“添加”Button控件。点击“添加”But...
  • jiliqiang1986
  • jiliqiang1986
  • 2017-03-06 12:08:30
  • 3072

C#的Winform窗体之间的传值

本人做Winform比较少,所以关于Winform窗体间的传值方式知道的也就这么几种。 1.通过构造函数进行传值。 实现代码如下: 在窗体Form2中 int value1; ...
  • a631464421
  • a631464421
  • 2015-03-26 21:04:00
  • 5445

C# winform窗体间传值(使用委托或事件)

  • 2017年11月06日 22:21
  • 42KB
  • 下载

两个窗体间实时传递数据

相信大家在做系统的时候,很多人都遇到需要在两个不同的窗体间传递数据的情况,例如可以单独打开一个窗口,用于显示代码名称对照关系,通过双击该窗体的数据,我们希望这个数据传递到另一个窗体中。如何实现两个窗体...
  • liangsanpi
  • liangsanpi
  • 2008-11-24 10:44:00
  • 826

【C#】窗体间互相传值

网上关于C#之间的窗体之间互相传值其实很坑的。主要有修改要被传递数值的窗体的构造函数,然而这种方法,如果你要做打开一个窗体,然后这个窗体输入完东西之后传递回去,根本就是不知道怎么实现。之后还有什么委托...
  • yongh701
  • yongh701
  • 2015-12-03 17:33:33
  • 2793

窗体间的传值.doc

  • 2010年03月16日 16:22
  • 29KB
  • 下载
收藏助手
不良信息举报
您举报文章:C# 窗体间传值
举报原因:
原因补充:

(最多只允许输入30个字)