关于在窗体之间传值的问题 C# winform
做c/s项目已经有段时间了 两个月了吧
经常会被Form A 和Form B窗体间互相传值 困扰
最近在做及时查询(用小的查询框 快速查取编码) 通过在网上的查找 总结出了以下几种方式可以实现
1全局变量 2属性 3 窗体构造函数 4用委托 5用委托加事件的方法
1 全局变量
这个最简单,只要把变量 定义为 static 就可以了
缺点是 静态变量比较危险,总之我一开始就想过这种方法,但是始终没有用过...(担心被老大骂,要是在学校的课程设计,果断这样弄好了)
在Form A 中定义一个static 变量
public static int i =9;
然后在 FormB 中 的按钮事件下:
private void button1_clic(object sender,system.Event Args)
{
textBox1.Text=Form.i;
}
2利用属性来传值
他的核心思想是这样的
将类作为一个参数 传进构造函数中 ,由于类是引用类型 在B中 定义一个类的实体,将这个参数赋值给它
这样 这两个类(具有string 属性的)就指向了同一个地址。这时在FormB,FormA 就拥有了 一块共同使用的地址
详情可参见
http://blog.csdn.net/tjvictor/article/details/772711
3利用窗体构造函数传值
这个的意思就是 将需要传的值 放在构造函数的参数中
传给新的窗体类
缺点是单向的 也就是 只能 parent 窗体 给 子窗体 传值
4 利用委托传值
这个最早是彭斌跟我讲的
但是一直 对于高级编程的东西 不太熟悉 不知道怎么写
于是彭斌给我写了一个 委托加事件的 在这里 又从网上找了到了 纯委托的东西
FormB中先定义一个delegate
Public delegate void returnvalue (int i);
public returnvalue Return;
然后在FormB中的Button 中写下如下
private void button1_Click (object sender,System.EventArgs e)
{
if(ReturnValue !=null)
ReturnValue(8);
}
----------------------------------------------------------------
Form 1中的button 按钮如下:
private void button1_Click(object sender,System.EventArgs e)
{
Form2 temp =new Form2();
temp.ReturnValue = new temp.Form2.returnvalue(showvalue);
temp.Show;
}
private void showvalue(int i)
{
textBox1.Text=i.Tostring();
}
点击form B的button ,formA的textbox 中的值就会相应的变化。
5用委托加事件的方法
下边是彭斌的代码
Form2 中
public event SelectedKeyValueHander SelectedKeyValue;
private void button1_click(object sender, DataGridViewCellMouseEventArgs e)
{
_text = dgvList.Rows[e.RowIndex].Cells["colCode"].Value.ToString();
if (SelectedKeyValue != null)
SelectedKeyValue(new KeyValue() { Value = _text });
HostForm.DialogResult = DialogResult.OK;
}
-----放在form 2的同命名空间下
public class KeyValue : EventArgs
{
public string Value { get; set; }
public KeyValue() { }
}
public delegate void SelectedKeyValueHander(KeyValue args);
然后再form 1 的下边写上
private void button1_click(object sender, DataGridViewCellMouseEventArgs e)
{
KeyValueList KVL = new KeyValueList(3);//KVL是我做的窗体
if (KVL.NavigatedDialog() == DialogResult.OK) ;//如果已经关闭窗口的话,那么委托增加传值函数
KVL.SelectedKeyValue += ReturnValue;
}
private void ReturnValue(KeyValue args)
{
//MessageBox.Show(args.Value);
txtVendor.Text = args.Value;
}
在这5个方法中
第一个是双向的传值
第二个是单向的 也可以使双向
第三个是单向的
第四个也是单向的
第五个也是单向的
部分资料来自互联网
http://blog.csdn.net/tjvictor/article/details/824617
如果你觉得写的不错,欢迎转载和点赞。 转载时请保留作者署名jilodream/王若伊_恩赐解脱(博客链接:http://www.cnblogs.com/jilodream/