解决方案 »

  1.   

    http://blog.csdn.net/wuyazhe/article/details/5642431
      

  2.   

    我一般是在Program.cs里处理:[如下代码,LoginForm为登陆窗体;MainForm为主窗体。]//
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);                //登录
                    DialogResult result = new LoginForm().ShowDialog();
                    MainForm mainForm = new MainForm();
                    if (result == DialogResult.OK)
                    {
                        Application.Run(mainForm);
                    }
    //
      

  3.   

    一般C/S程序启动的时候都是认为未登录的吧,最多加个自动登录,还是先加载登录窗体好一些。如果先加载主窗体再隐藏会看到它弹出来再消失。不建议在Application.Run之前使用窗体。因为Application.Run是建立主消息循环的,之前如果用了ShowDialog()显示模式窗体,这个窗体和通常情况下是不太一样的,它有自己的消息循环,但是主消息循环还没有启动。很多控件没有在这种情况下测试过,可能会出现奇怪的问题。用ApplicationContext更好一些。public class MyApplicationContext : ApplicationContext
    {
        public static void Run()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);        // 创建登录窗体,启动消息循环
            var loginForm = new LoginForm();
            Application.Run(new MyApplicationContext(loginForm));
        }    public MyApplicationContext(LoginForm loginForm) : base(loginForm)
        {
            loginForm.FormClosing += (sender, args) => MainForm = null;
            loginForm.FormClosed += (sender, args) => {
                bool success = ((LoginForm)sender).DialogResult == DialogResult.OK;
                if (success)
                {
                    // 登录成功, 创建并显示主窗体
                    MainForm = new MainForm();
                    MainForm.Show();
                }
                else
                {
                    // 登录失败,退出
                    ExitThread();
                }
            };
        }
    }static class Program
    {
        [STAThread]
        static void Main()
        {
            MyApplicationContext.Run();
        }
    }msdn上也有个类似的例子http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext(v=vs.110).aspx
      

  4.   

    其实有很多种做法,看你想要什么效果
    1.一开始就显示主窗体,登陆窗体以模式窗体方式启动
    2.如果主窗体内容过多,或需要先判断登陆用户,再加载不同内容,还有2种办法
    1)登陆窗体hide,主窗体show
    2)用Application.Run打开主窗体,登陆窗体close
      

  5.   

    登录窗体是真正程序的窗体。而用户看到的“主窗体”,则是业务意义上的主窗体,在程序流程上是“第二个”窗体。登录结束时可以这样处理,例如private void OpenMainWindow()
    {
        var f = new MainForm();
        f.Closed += f_Closed;
        f.Show();
        this.Hide();
    }private void f_Closed(object sender, EventArgs e)
    {
        this.Close();
    }这样,当业务主窗体关闭时,登录窗体也就退出了。
      

  6.   

    其实简单点,也可以在逻辑上的"主窗体"关闭的时候使用Application.Exit(),那么所有此工程打开的页面就都会关闭了,不管是显示的还是隐藏的,是在"主窗体"之前打开的还是之后打开的
      

  7.   

    登陆窗口不必关闭,在某种意义上这正是需求所在,比如 mainfrom上有 “切换账户”或者“锁屏”功能。控制它的hide,而不是直接close会更有意义。