我想在一个主窗体mfrm显示时,显示一个登陆窗体,给这个form传递一个登陆用户的信息。这个登陆窗lgfrm是不能绕过的,我用的是mfrm.showDialog();我不想在mfrm显示之前,load lgfrm.该如何做呢?

解决方案 »

  1.   

    你把程序入口点设置在mfrm,在入口处处理lgfrm的信息,这样不就行了吗?
      

  2.   

    登录窗写带参数的体构造函数,登录窗体构造的时候传递过去比如
    我想要带回一个string:
    public lgfrm(out string str)
    {
        InitializeComponent();
    }
    这样好像不行,因为我不想在lgfrm构造时就传回str。
    我想在填好登陆信息后传回。
      

  3.   

    你可以在做一个公共的类。在类中定义你要使用的public 属性y
    在mfrm中声明公共类的变量x,注意不是对象。
    然后在登陆窗体中new公共类的对象a,此时给对象的属性赋值。
    在登陆窗体中new mfrm的对象b。
    此时可以把mfrm的对象赋给窗体对象的属性
    b.x=a;
    这样你就可以在mfrm中用你赋了值的属性了
    x.y,就是你想要的值了!!1
      

  4.   

    把你要传回的值写成对话窗类的属性(或者public字段)返回的时候直接调用就可以了。
    public LoginForm : Form
    {
       string userName;
       ...
       public string UserName
       {
          get { return userName;}
       }
       //添加处理userName的方法。使之返回的时候返回你需要的值
    }调用:using( LoginForm loginForm = new LoginForm())
    {
        if( loginForm.ShowDialog()== DialogResult.OK)
         {
              string userName - loginForm.UserName;
         }
    }
      

  5.   

    string userName = loginForm.UserName;
      

  6.   

    就是不能在lgfrm中new mfrm呀必须是mfrm中 new lgfrm的
      

  7.   

    你可以在主窗体mfrm设置用来存储登陆信息的字段,然后在构造lgfrm的时候把mfrm的this过去
      (构造函数可以这样写public lgfrm(mfrm mainForm)), 之后就可以在lgfrm对象中设置mfrm的属性
      或者字段了
      

  8.   

    在显示mfrm之后再显示lgfrm,可以在mfrm的Form_Activated事件中进行
    LoginForm loginForm = new LoginForm();
    loginForm.ShowDialog();
    只要在事件中控制上面代码只执行一次就可以了
      

  9.   

    re:niwalker那样的话loginForm.UserName是不能改变的啦
      

  10.   

    解决了!总结一下:
    把mfrm的this过去,能够修改mfrm,说明传递的是指针,实际在lgfrm里没有创建mfrm的副本所以,在lgfrm里任何对mfrm的修改都会反映到mfrm本身。谢谢