窗体间传值

来源:互联网 发布:php 偏移量 编辑:程序博客网 时间:2024/06/05 10:37

俩个窗体之间,是不能直接调用彼此的相应变量和控件的值的。

窗体通信有以下几种方式,

1,单项通信

即一个窗体调用另一个窗体,同时不需要新调用的窗体的返回值。

方法有:

(1),用构造函数法

在Form2定义时,定义成如下形式:

public static  string array ;  //定义一个字符串,保留传入的串值。

        public Search(string arrList)
        {
            InitializeComponent();
            array = arrList;
        }

在Form1中TxtBox1的值传入Form2,代码如下

Form2 f2=new Form2(TxtBox2.Text);

(2)定义属性法

即在Form2中,定义一些共有属性,在Form中需要,只需调用相应属性即可。

如定义个指定字串的长度的属性:

        public  int Length
        {
            get { return lenth; }
            set { Length = value; }
        }

在Form1中只需如下调用语句:

Form2 f2=new From2();

int  Length=f2.Length;

2,窗体间双向通信

用委托方法和SendMessage可以解决。  //SendMessage是向窗口发送消息,一直等到WndProc方法处理此消息。
新建一个WindowsApplication,创建两个WinForm.其实它们就是两个类.
每个WinForm中各加入一个Button和一个TextBox.
在WinForm2中写入代理和事件(delegate and event)如下:


//代理声明

//注意代理的参要和要调用的方法参数相同。
public delegate void SendMessage(string str);
//事件声明
public event SendMessage SendEvent;


private void btnSend_Click(object sender, EventArgs e)
{
       //调用事件
      SendEvent(textBox1.Text);
}
在WinForm1中写入如下代码:
private void btnShow_Click(object sender, EventArgs e)
{
        Form2 f2 = new Form2();
        //Form2事件注册
        f2.SendEvent+=new Form2.SendMessage(GetMessage);
        f2.Show();
}
//代理调用的方法
public void GetMessage(string str)
{
       textBox1.Text = str;
}
在点击WinForm1的Button弹出WinForm2后,在WinForm2中文本框输入文字,然后点击按钮,信息将会立刻发送到WinForm1,并显示出来.