Form1为主窗体,Form2,3,4为子窗体.
我目前的方法是Form2,3,4各有一个Form1的指针变量,在构造时就把Form1的指针传给它们.但是Form1的各属性,数据,控件都是private的.如果要全改成public安全性不好.如果在Form1中定义一堆获取数据,控件指针的函数会大大增加代码量,因为数据交换毕竟太多了.
有什么两全的办法么?谢谢!

解决方案 »

  1.   

    如果是从form1调用form2,可以在form2里写个方法,接收参数。
    比如
    public void callform2(string var1)
    {
        //你的处理语句
        form2.show();
    }试试吧,我也不知道这个方法好不好。
      

  2.   

    一般来说,窗体之间的交互不会太多的
    如果是ShowDialog的话,应该窗体是有主次之分的,可以在子窗体写一个public方法(建议除了这个方法,其他的都不要声明为public的),并使用DialogResult为返回值,其中加一个引用传递的参数,该参数为一个类,类你自己定,能够包含所要的信息即可,类似于EventArgs这种。
    如果是直接Show的窗体,往往需要子窗体增加事件,进行了什么操作可以直接通知主窗体,让主窗体更新界面,并且主窗体要使用子窗体的Closed事件,确保时刻了解子窗体是否已关闭。
      

  3.   

    项目中添加一个公共类,用public的静态变量或属性保存要传递的数据。class dataHelper
    {
      public static int num;
      public static string str;
      ........................
    }
    各窗口可以通过这个来传递参数。dataHelper.num     dataHelper.str
      

  4.   

    3.在子窗体中写一个自定义的显示方法,接收父窗体传来的参数,如果这些参数可能被修改的话,记得加上ref或out。
    public void ShowMe(ref string arg1,ref string arg2...)
    {
    //预处理
    this.Show();
    //或this.ShowDialog();
    //后续处理
    }
    必要的话处理子窗体的Closing事件。此方法未经验证,仅供参数。
      

  5.   

    处理Closing事件:
    如果子窗体是Show()的话,应该在主窗体中处理
    如果子窗体是ShowDialog(),在哪儿处理不是问题,注意设置DialogResult的值就行了。
      

  6.   

    安全性不需要考虑太多吧,主要就是传递的数据量大小,不过这是很难保证一点冗余都没有的
    ││博客空间:http://blog.csdn.net/lovingkiss
    ││资源下载:http://download.csdn.net/user/lovingkiss
    ││Email:loving-kiss@163.com [MSN也是这个]
    ││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
    ╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤