学习C#不久,对于C#不同窗体之间的数据传递,总是处理得不好,今天,通过上网查找资料,小有心得。
C#之间不同窗体之间的数据传递,无非有两种方式:
- 数据库或文件。这是最直接的方式,需要传递的数据存储在数据库、配置文件、或者xml文件中,任何能够访问此数据库或文件的窗体均能对数据进行访问,解决了数据之间的传递问题。
- 参数传递。参数传递有几种情况,分别为:(假设父窗口为frmMain, 子窗口分别为frmSub1, frmSub2)
- 方式1:父窗口向子窗口传递参数。这种情况非常常见,也最简单,假设父窗口frmMain要向子窗口frmSub1传递数据dataFromMain并在frmSub1中进行处理,则只需在子窗口中定义一个函数如:public typeReturn DoHandler(dataFromMain)即可,其调用模式为:
- frmSub1 frmsub = new frmSub1(); frmsub.DoHandler(dataFromMain);
- 方式2:子窗口向父窗口传递参数。这种情况稍微复杂,子窗口要向父窗口传递数据,那么必须在子窗口中保留父窗口的指针,即将父窗口作为子窗口的一个数据成员。若子窗口frmSub1要向frmMain中传递数据,则frmSub1的类定义为:
- 方式1:父窗口向子窗口传递参数。这种情况非常常见,也最简单,假设父窗口frmMain要向子窗口frmSub1传递数据dataFromMain并在frmSub1中进行处理,则只需在子窗口中定义一个函数如:public typeReturn DoHandler(dataFromMain)即可,其调用模式为:
-
- public frmMain;
- public class frmSub1
- {
- frmSub1's attribute;
- frmMain mfrmMain;
- public frmSub1(frmMain frmmain)
- {
- initiate_attribute();
- mfrmMain = frmmain;
- }
- }
在构造子窗口的时候,其形式为:frmSub1 frmsub1 = new frmSub1(this),这里的this即是主窗口。
- 方式3:子窗口之间传递参数。若父窗口是容器,则只需将子窗口间的传递数据的控件声明为public即可;若不是,则可以参考方式2,通过在主窗口中定义变量来传递子窗口之间的数据