一个登录窗体,Main在里面,成功登录后得到两个值ID和Name然后怎么把这个窗体关掉,显示另外一个Form啊?并且在这个新的Form中要得到ID和Name这个两个值;this.close();
new FrMain().show();这样出的问题乱七八糟,一下两个都关了,一下旧的是关了,新的也出来了,可你把新的关掉后进程还不结束!!快晕死了,高手指点下。

解决方案 »

  1.   

    Main.cs
    public class Main:....
    {
     public static string username="";
     public static string password="";
      
    }
    OtherForm.cs
    ....
    if( Main.username == ".."  && Main.passowd == ".." )
      

  2.   

    是啊!我就这样做的!
    但你在新窗体调用了老窗体里面的东西!!
    但老窗体已经close掉了!
    所以系统并没释放掉老窗体的所有资源,现在我把新的关掉了,进程还不结束,怎么办?
      

  3.   

    再说了,你不管怎么做你都是在老窗体里面new的新窗体,你如果把老窗体的dis掉,你新窗体怎么也跑不掉,高手们,我越想越糊涂了,帮帮帮
      

  4.   

    this.Hide();
    Rich.Main.Library.SimpleInputForm test = new Rich.Main.Library.SimpleInputForm();
    test.ShowDialog();
    this.Close();
      

  5.   

    我试验了下确实出现了你所说的问题,换个思路不知道是否合搂住的意思:
    你可以在一个form1里把,username和怕ssword写进一个文件中xml或者其他随你写
    然后在new form2();
    this.hide();
    然后再fomr2里读出文件内容;解决方法2:
    在form2的构造函数中写方法获得form1中的username和password
    如下:
    public class Form2 : System.Windows.Forms.Form
    {
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null;
    private string name="";
    private string id=""; public Form2(string name_fm1 ,string id_fm1)
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); if(name_fm1!=""&&id_fm1!="")
    {
    this.name=name_fm1.ToString();
    this.id =id_fm1.ToString();
    }
    //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    }
    .....
    }然后在form1中 private void button2_Click(object sender, System.EventArgs e)
    {
    Form2 fm2=new Form2(this.textBox1.Text,this.textBox2.Text);
    fm2.Show();
    this.Hide(); }
      

  6.   

    在窗口A中new出来的窗体B的父窗体是窗体A.所以当窗体A关闭时,窗体B会被强制关闭的.你可隐藏窗体A,并在窗体B的构造函数中,重载一个方法.如下:FormB.cs中
    public FormB(string userName,string userPass)
    {
    this.UserName = userName;
    this.UserPass = userPass
    }在窗体A中就可以使用此构造函数来向窗体B中传递用户名和密码了.this.hide();
    FormB form = new FormB(this.textBox1.Text,this.textBox2.Text);
    form.show();
      

  7.   

    static void Main() 
    {
        //在此处以对话框形式显示登陆窗体,然后将获得的值存储到当前窗体的变量中
        FormMain frmMain = new FormMain();
        Application.Run( frmMain );
    }
      

  8.   

    修改Main函数static void Main() 
    {
    /// 获得系统登录信息
    FrmLogin tmpForm = new FrmLogin();
    tmpForm.ShowDialog();
    if(tmpForm.DialogResult != DialogResult.OK)
    {
    tmpForm = null;
    return;
    }
    else
    {
    SysInfor sysInfor = new SysInfor(tmpForm.UserPass, tmpForm.UserName);
    FrmMain mainFrm = new FrmMain(sysInfor);
    tmpForm = null;
    Application.Run(mainFrm);
    /// 初始化全局变量
    }
    }
      

  9.   

    以上大家说的方法我确实没想到,可能是高级语言搞多了,忘记了当时学C的时候一个Main从头走到尾的设计思路了!!但。你看人家VB,开了别人关了自己,多好啊,关没了进程也结束了。
      

  10.   

    楼主,请问:
    1,为什么一定要把Main()放到登陆窗口中,难道就不可以换换思维,把Main()拿出去吗?
    2,程序被终止是因为Main()所在的窗口被Close掉了,还是因为其被Dispose掉了。所以,针对上面两点可以指定不同 的解决方法
    1,把Main()从登陆窗口拿出去
    2,把.NET为你自动生成的Dispose(bool)重载版本修改一下,改成Hide该窗口,而不是Dispose,当然此后Close()时就是Hide而不是Dispose,除非你显式调用Dispose
      

  11.   

    你既然说Main在登陆窗体中,照你的说法,就是在打开子窗体后,想关闭父窗体,反正我是办不到子窗体不关的情况下,关闭父窗体的,还是换个方法吧,换个方法的话,要达到你的要求就变得蛮容易实现的了