当前位置: 首页 > 编程语言 > C#

表间通信的最佳方式?分享

时间:2023-04-10 19:58:29 C#

桌间最佳沟通方式?我几乎从不使用(高级或根本不使用)GUI,或带有简单控件的简单表单……但这次我有更复杂的东西,而且我对GUI没有太多经验。我有一个主窗体(将来可能更多)其他子窗体也可以打开(它们可能有自己的子窗体),我想知道,在你看来,它们之间最好的交流方式是什么?我想过将主窗体作为参数传递给子窗体的构造函数,但这似乎不是一个好方法,特别是如果我需要在其他不同的子窗体之间进行通信,更不用说我必须仔细检查回车,或者做一些方法,但它看起来更像是函数式编程而不是面向对象编程......也许我可以:你的构造函数可能是返回主窗体的最合理的通信方法。您的子表单将执行以下操作:publicclassSubForm:Form{publicSubForm(MainFormparentForm){_parentForm=parentForm;}私有MainForm_parentForm;privatevoidbtn_UpdateClientName_Click(objectsender,EventArgse){_parentForm.UpdatexClientName(t;}}然后在MainForm上公开公共方法:publicclassMainForm:Form{publicvoidUpdateClientName(stringclientName){txt_MainClientName.Text=clientName;}}你可以依次订阅子窗体中的事件:(_subForm1_ClientUpdated);_subForm2.ClientUpdated+=newEventHandler(_subForm2_ProductUpdated);}privatevoid_subForm1_ClientUpdated(objectsender,EventArgse){txt_ClientName.Text=_subForm1.ClientName;//公开一个公共属性}privatevoid_subForm2_ProductUpdated(objectsender,EventArgse){txt_ProductName.Text=_subForm2.ProductName;//公开一个公共属性}}一个好方法是以您想要开始与之通信的形式声明委托。您需要一个委托和一个回调函数:publicdelegatevoidSetValueDelegate(stringvalue);公共SetValueDelegateSetValueCallback;然后可以将另一个表单附加到该委托。在那一刻,两种形式必须相互了解,但之后就不知道了:第二种形式必须声明一个与委托定义匹配的函数:publicvoidSetValueFunction(stringvalue){//dosomething}现在第一种形式可以使用委托来使用第二种形式的函数(以及附加的所有其他形式或类给委托人:SetValueCallback(txtParam.Text);编辑:使用系统做了一个完整的例子;命名空间DelegateTest=null){SetValueCallBack("HelloWorld!");}}}publicclassClass2{publicvoidSetValueFunction(stringvalue){Console.WriteLine(value);}}publicclassLauncher{publicstaticvoidMain(string[]args){Class1c1=newClass1();Class2c2=newClass2();c1.SetValueCallBack+=newSetValueDelegate(c2.SetValueFunction);c1.Test();}}}最灵活,可扩展(恕我直言,最专业)的方法是使用CAB(复合应用程序块)...简单来说,CAB是一组2-3个程序集,它们以正确的方式实现复杂UI应用程序所需的大量管道并公开此管道连接到图书馆的用户。除其他外,它有一个非常好的事件和命令(如命令模式)系统。缺点:需要一些时间来学习,不是很容易掌握。这是一个综合(但易于访问)的教程,可帮助您更轻松地学习。您可以使用表单的内置Tag属性,它是一个“对象”类。publicForm1(){(ComplicatedDataStructure)Tag=newComplicatedDataStructure();}..表格1=新表格1();..form2=新的Form2();..form2.Tag=form1.Tag;所以form2.Tag等于“ComplicatedDataStracture”对象;以上就是C#学习教程:窗体间通信的最佳方式?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: