WINform的程序又登陆窗体
和显示窗体.开发时.时不是显示窗体是主窗体
登陆窗体是副窗体.程序开始时new 一个登陆窗体吧
static void Main()
{
   Application.EnableVisualStyles();
   Application.SetCompatibleTextRenderingDefault(false);
   Application.Run(new 登陆窗体());        
}
当登陆成功了肯定.this.close();来关闭登陆窗体.但是由于登陆窗体的主窗体.一旦关闭.所有的东西都会关闭的.
如果把它设置为透明.这也耗费资源.这个问题请问下高手们时怎么样解决的??

解决方案 »

  1.   

    static   void   Main(string[]   args)   
      {   
      //打开登录窗口   
      LoginForm   lg   =   new   LoginForm();   
      if(lg.ShowDialog()   ==   DialogResult.OK)   
      {   
        
      Application.Run(new   MainForm());//打开你指定的窗口   
      }   
        
      }   
      登录窗口(LoginForm)中   
      在你完成密码验证代码后加上 this.DialogResult=DialogResult.OK; 
      

  2.   

    不要把登录窗体run起来,showDialog()判断一下再run主程序
      

  3.   

    简单一点:在登录窗体中,构造函数里面加一个参数public Form FrmLogin(Form mainform)
    {
       this._mainForm=mainform;
    }private string Form _mainForm=null;
    public Form MainForm
    {
      set{_mainForm=value;}
    get{return _mainForm;}
    }在登录成功的地方,关闭登录窗体时调用:
    if(this.MainForm!=null)
    {
    this.MainForm.Visible=true; //显示
    }
    this.Close();
    在主窗体中,调用显示loginFrm的地方,加载,或者一个事件中都行FrmLogin frm=new FrmLogin(this); 
    frm.Show();
    this.Visible=hidden;
      

  4.   

    提供一种简单的
     public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }        private void MainForm_Load(object sender, EventArgs e)
            {            
                LoginForm lf = new LoginForm();
                lf.ShowDialog();
                this.Hide();
                //if login success
                WorkForm wf = new WorkForm();
                wf.FormClosed += new FormClosedEventHandler(wf_FormClosed);
                wf.ShowDialog();
                this.Hide();
            }        void wf_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }
        }static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
            }
        }
      

  5.   


    上面打错了
    改成下面用Hide()与Show来进行在登录窗体中,构造函数里面加一个参数 public Form FrmLogin(Form mainform) 

      this._mainForm=mainform; 
    } private string Form _mainForm=null; 
    public Form MainForm 

      set{_mainForm=value;} 
    get{return _mainForm;} 
    } 在登录成功的地方,关闭登录窗体时调用: 
    if(this.MainForm!=null) 

     MainForm.Show();//显示 

    this.Close(); 
    在主窗体中,调用显示loginFrm的地方,加载,或者一个事件中都行 FrmLogin frm=new FrmLogin(this); 
    frm.Show(); 
    this.Hide();//用this.Hide();
      

  6.   

    上面找默认构造函数打错了public FrmLogin(Form mainform) :base()

      this._mainForm=mainform; 
    } //默认构造函数
    public FrmLogin(){
               
    InitializeComponent();
            }或者
    public FrmLogin(Form mainform) 

      this._mainForm=mainform; 
    InitializeComponent();
    } public FrmLogin(){
               
    InitializeComponent();
            }
      

  7.   

    再给个我个人比较常用的方式public class FormControler
        {
            private static FormControler s_Instance;        public static FormControler Instance
            {
                get
                {
                    if (s_Instance == null)
                    {
                        s_Instance = new FormControler();
                    }
                    return FormControler.s_Instance;
                }
                set { FormControler.s_Instance = value; }
            }
            public void Login()
            {
                if (FormModel.Instance.LoginStatus == LoginStatus.Fail)
                {
                    Application.Run(new LoginForm());
                }            if (FormModel.Instance.LoginStatus == LoginStatus.Success)
                {
                    Application.Run(new WorkForm());
                }
            }
        }    public class FormModel
        {
            private static FormModel s_Instance;        public static FormModel Instance
            {
                get
                {
                    if (s_Instance == null)
                    {
                        s_Instance = new FormModel();
                    }
                    return FormModel.s_Instance;
                }
                set { FormModel.s_Instance = value; }
            }        private LoginStatus m_LoginStatus = LoginStatus.Fail;        public LoginStatus LoginStatus
            {
                get { return m_LoginStatus; }
                set { m_LoginStatus = value; }
            }        
        }    public enum LoginStatus
        {
            Success,
            Fail
        }
     static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                //Application.Run(new MainForm());
                FormControler.Instance.Login();
            }
        }        private void LoginForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                FormModel.Instance.LoginStatus = LoginStatus.Success;
            }