做c/s项目已经有段时间了两个月了吧
经常会被FormA和FormB窗体间互相传值困扰
最近在做及时查询(用小的查询框快速查取编码)通过在网上的查找总结出了以下几种方式可以实现
1全局变量2属性3窗体构造函数4用委托5用委托加事件的方法
1全局变量
这个最简单,只要把变量定义为static就可以了
缺点是静态变量比较危险,总之我一开始就想过这种方法,但是始终没有用过...(担心被老大骂,要是在学校的课程设计,果断这样弄好了)
在FormA中定义一个static变量
publicstaticinti=9;
然后在FormB中的按钮事件下:
privatevoidbutton1_clic(objectsender,system.EventArgs)
{
textBox1.Text=Form.i;
}
2利用属性来传值
他的核心思想是这样的
将类作为一个参数传进构造函数中,由于类是引用类型在B中定义一个类的实体,将这个参数赋值给它
这样这两个类(具有string属性的)就指向了同一个地址。这时在FormB,FormA就拥有了一块共同使用的地址
详情可参见
/tjvictor/article/details/772711
3利用窗体构造函数传值
这个的意思就是将需要传的值放在构造函数的参数中
传给新的窗体类
缺点是单向的也就是只能parent窗体给子窗体传值
4利用委托传值
这个最早是彭斌跟我讲的
但是一直对于高级编程的东西不太熟悉不知道怎么写
于是彭斌给我写了一个委托加事件的在这里又从网上找了到了纯委托的东西
FormB中先定义一个delegate
Publicdelegatevoidreturnvalue(inti);
publicreturnvalueReturn;
然后在FormB中的Button中写下如下
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
if(ReturnValue!=null)
ReturnValue(8);
}
----------------------------------------------------------------
Form1中的button按钮如下:
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
Form2temp=newForm2();
temp.ReturnValue=newtemp.Form2.returnvalue(showvalue);
temp.Show;
}
privatevoidshowvalue(inti)
{
textBox1.Text=i.Tostring();
}
点击formB的button,formA的textbox中的值就会相应的变化。
5用委托加事件的方法
下边是彭斌的代码
Form2中
publiceventSelectedKeyValueHanderSelectedKeyValue;
privatevoidbutton1_click(objectsender,DataGridViewCellMouseEventArgse)
{
_text=dgvList.Rows[e.RowIndex].Cells["colCode"].Value.ToString();
if(SelectedKeyValue!=null)
SelectedKeyValue(newKeyValue(){Value=_text});
HostForm.DialogResult=DialogResult.OK;
}
-----放在form2的同命名空间下
publicclassKeyValue:EventArgs
{
publicstringValue{get;set;}
publicKeyValue(){}
}
publicdelegatevoidSelectedKeyValueHander(KeyValueargs);
然后再form1的下边写上
privatevoidbutton1_click(objectsender,DataGridViewCellMouseEventArgse)
{
KeyValueListKVL=newKeyValueList(3);//KVL是我做的窗体
if(KVL.NavigatedDialog()==DialogResult.OK);//如果已经关闭窗口的话,那么委托增加传值函数
KVL.SelectedKeyValue+=ReturnValue;
}
privatevoidReturnValue(KeyValueargs)
{
//MessageBox.Show(args.Value);
txtVendor.Text=args.Value;
}
在这5个方法中
第一个是双向的传值
第二个是单向的也可以使双向
第三个是单向的
第四个也是单向的
第五个也是单向的
部分资料来自互联网
/tjvictor/article/details/824617
如果觉得《关于在窗体之间传值的问题 C# winform》对你有帮助,请点赞、收藏,并留下你的观点哦!