失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 关于在窗体之间传值的问题 C# winform

关于在窗体之间传值的问题 C# winform

时间:2019-01-04 02:30:02

相关推荐

关于在窗体之间传值的问题  C#  winform

做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》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。