none
如何创建新的主窗体 RRS feed

  • 问题

  • 如何能够实现:C#窗体编程中,切换用户后,原主窗体关闭后,不退出应用程序,而创建新的主窗体,显示新的用户名,登录时间等登录信息呢?

    2011年9月9日 5:44

答案

  • 这个是relogon的功能。

    实现的方法很多。

    最简单的方法,你在main方法中,关闭主窗体,重新显示logon窗体,也就是重新登录。不过要注意一些缓存的对象需要清理掉,不过一般都会在重新登录后被新用户的信息覆盖,不过保险起见还是都清理掉。

    如果不是重新登录,main方法关闭主窗体后就退出就好了。

     


    family as water
    2011年9月9日 6:37
  • Hi chtLindows,

    执行了this.Close()之后应用程序主进程销毁了, 后面关闭conn以及创建新窗口并显示出来的几行代码其实是不会执行的.
    你可以将后面几行代码放在FormClosing Event这个事件中, 这个事件中的逻辑会在当前窗口(你的程序中应该是主窗口)关闭之前执行.

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月12日 7:43
    版主

全部回复

  • 这个是relogon的功能。

    实现的方法很多。

    最简单的方法,你在main方法中,关闭主窗体,重新显示logon窗体,也就是重新登录。不过要注意一些缓存的对象需要清理掉,不过一般都会在重新登录后被新用户的信息覆盖,不过保险起见还是都清理掉。

    如果不是重新登录,main方法关闭主窗体后就退出就好了。

     


    family as water
    2011年9月9日 6:37
  • 这个是relogon的功能。

    实现的方法很多。

    最简单的方法,你在main方法中,关闭主窗体,重新显示logon窗体,也就是重新登录。不过要注意一些缓存的对象需要清理掉,不过一般都会在重新登录后被新用户的信息覆盖,不过保险起见还是都清理掉。

    如果不是重新登录,main方法关闭主窗体后就退出就好了。

     


    family as water

    private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();//退出应用程序
               
            }

    //以上是主窗体关闭时引起的事件

    private void btnDenglu_Click(object sender, EventArgs e)
            {
                try
                {
                    if (txtPwd.Text.Trim() == "" || cbbUserName.Text.Trim() == "")
                    {
                        MessageBox.Show("用户名或密码不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        string name = cbbUserName.Text;//获取用户名
                        string pwd = txtPwd.Text.Trim();//获取密码
                        SqlConnection conn = DBConnection.MyConnection();//创建数据库连接对象
                        conn.Open();//打开数据库连接
                        SqlCommand cmd = new SqlCommand("select * from tb_User where UserName='" + name + "' and UserPwd='" + pwd + "'", conn);
                        SqlDataReader sdr = cmd.ExecuteReader();//创建数据读取器
                        sdr.Read();//读取数据
                        if (sdr.HasRows)//判断是否有数据
                        {
                            string time = DateTime.Now.ToString();//得到时间信息
                            string sql = "update tb_User set LoginTime='" + time + "' where UserName='" + name + "'";
                            operate.OperateData(sql);//更新数据库信息
                            this.MdiParent.Close();//切换用户登录窗体的父窗体就是主窗体即frmMain窗体,程序运行到此就不往下运行了,直接调用frmMain_FormClosed事件应用程序退出,怎样修改使应用程序继续往下运行,但又不影响单击主窗体关闭按钮时退出应用程序
                            this.Close();
                            conn.Close();//关闭连接
                            frmMain Main = new frmMain();//创建主窗体对象
                            Main.User = name;//为字段赋值
                            Main.Logintime = time;//为字段赋值
                            Main.Show();//显示主窗体
                           
                        }
                        else
                        {
                            txtPwd.Text = "";//清空文本内容
                            cbbUserName.Text = "";
                            MessageBox.Show("用户名或密码错误!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        }

                    }
                }

    上面是切换用户登录窗体上的登录按钮单击事件,问题是程序运行到this.MdiParent.Close();就退出了,怎么改?

     

    2011年9月9日 7:42
  • Hi chtLindows,

    执行了this.Close()之后应用程序主进程销毁了, 后面关闭conn以及创建新窗口并显示出来的几行代码其实是不会执行的.
    你可以将后面几行代码放在FormClosing Event这个事件中, 这个事件中的逻辑会在当前窗口(你的程序中应该是主窗口)关闭之前执行.

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月12日 7:43
    版主