实现登录页与主页切换

我们做winform项目时,用户在输入正确账号密码前提下要跳转主页面,下面说一下简单实现流程。

首先我们新建两个窗体”LoginForm.cs“,”HomeForm.cs“作为登陆页面与主页面。

对于登录页面,主要有账号输入textbox:”account_textBox“;密码输入textbox:”password_textBox“;登录按键Button:"login_btn";

(我这里注册没用上就不写了,眼睛按键是用来做密码明暗文切换的,可以移步去我另一个文章密码明文暗文切换 - ywwwik - 博客园 (cnblogs.com)

 对于首页,只需要创建窗体HomeForm.cs即可

其次要确保在Program.cs中我们的应用程序的主入口点为登录页面(LoginForm);

using System;
using System.Windows.Forms;

namespace SQLProjectDemo
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new LoginForm());
        }
    }
}

 我们只需要在检测用户账号密码输入成功后设置方法HomeSeting();

        public void HomeSetting()
        { 
            HomeForm home = new HomeForm();
            this.Hide();
            home.ShowDialog();
            this.Close();
        }

这里主要用了一个ShowDialog方法,在C# WinForms中,ShowDialog() 方法用于显示一个模态对话框。模态对话框是一种会阻塞用户与应用程序其他窗体交互的对话框,直到该对话框被关闭。

当调用 ShowDialog() 方法时,该方法将显示对话框并等待用户与对话框进行交互,如点击按钮或选择下拉菜单项。在此期间,用户无法与应用程序的其他窗体进行交互,直到对话框被关闭。

补充一下Hide()和CLose()的区别:

在C# WinForms中,this.Hide() 和this.Close()  这两个方法用于控制窗体的显示和关闭行为,但它们之间存在一些重要的区别。

  1. this.Hide():

    • 当调用 this.Hide() 方法时,窗体将从用户界面中隐藏,但它仍然驻留在内存中。这意味着如果用户点击一个按钮或其他操作来重新显示这个窗体,该窗体将恢复到之前的状态(如果它是一个表单)。
    • 隐藏的窗体仍然可以响应事件,例如按钮点击或焦点事件。
    • this.Hide()通常用于隐藏模态对话框或需要从用户界面中暂时移除的窗体。
  2. this.Close():

    • 当调用this.Close()方法时,窗体将关闭并从内存中释放。
    • 如果该窗体是一个模态对话框,那么它会关闭并释放资源,并且应用程序将返回到它之前所在的窗体。
    • 如果该窗体是一个非模态对话框或一个顶层窗体,那么它关闭后应用程序将结束。
    • this.Close()通常用于结束应用程序或关闭不再需要的窗体。

总结一下,this.Hide()用于隐藏窗体并保持其在内存中,而this.Close()用于关闭并释放窗体资源。

我上面设计到一个模态对话框和非模态对话框,其实简单的理解就是:不能同时操作其他界面的就是模态对话框,可以操作其他界面就是非模态对话框。

模态对话框(Modal Dialogue Box)是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。

非模态(Modeless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。例如,Windows提供的记事本程序中的【查找】对话框。 【查找】对话框不会垄断用户的输入,打开【查找】对话框后,仍可与其他用户界面对象进行交互。用户可以一边查找,一边修改文章。

总的来说,模态对话框和非模态对话框的区别在于当对话框打开时,是否允许用户进行其他对象的操作。

以下完整代码:

using SQLProjectDemo.Common;
using SQLProjectDemo.Model;
using SQLProjectDemo.Views;
using Sunny.UI;
using System.Data;
using System.Windows.Forms;

namespace SQLProjectDemo
{
    public partial class LoginForm : UIForm
    {
        string password;
        bool status = true;
        IDataReader dc = null;
        User user =  new Model.User();
        public LoginForm()
        {
            InitializeComponent();
        }

        private void password_textBox_TextChanged(object sender, System.EventArgs e)
        {
            password_textBox.PasswordChar = '*';
            password = password_textBox.Text;
            if (password_textBox.Text.Length > 16)
            {
                MessageBox.Show("不可设置十六位以上密码...");
                password_textBox.Text = password_textBox.Text.Substring(0, 16);
                return;
            }
        }

        private void showpassword_btn_MouseDown(object sender, MouseEventArgs e)
        {
            password_textBox.PasswordChar = new char();
        }

        private void showpassword_btn_MouseUp(object sender, MouseEventArgs e)
        {
            password_textBox.PasswordChar = '*';
        }

        public void login()
        {
            try
            {
                Dao dao = new Dao();
                //string sql = "SELECT * FROM t_user where id = '" + account_textBox.Text + "' and psw = '" + password + "'";
                string sql = string.Format("SELECT * FROM t_user where id = '{0}' and psw = '{1}'", account_textBox.Text, password);
                dc = dao.read(sql);
                dc.Read();
                //MessageBox.Show(string.Format("'{0}' '{1}'", dc[0], dc[1]));
            }
            catch 
            {
                MessageBox.Show("未查询到用户信息,请重新输入...");
                account_textBox.Text = "";
                password_textBox.Text = "";
                status = false;
            }
        }

        private void login_btn_Click(object sender, System.EventArgs e)
        {
            if (account_textBox.Text == "" && password_textBox.Text == "")
            {
                MessageBox.Show("请输入账号与密码...");
                return;
            }
            if (account_textBox.Text == "")
            {
                MessageBox.Show("请输入账号...");
                return;
            }
            if (password_textBox.Text == "")
            {
                MessageBox.Show("请输入密码...");
                return;
            }
            login();
            if (status)
            {
                HomeSetting();
            }
        }

        private void account_textBox_TextChanged(object sender, System.EventArgs e)
        {
            if (account_textBox.Text.Length > 16)
            {
                MessageBox.Show("不可设置十六位以上账号...");
                account_textBox.Text = account_textBox.Text.Substring(0, 16);
                return;
            }
        }
        //主页默认配置
        public void HomeSetting()
        { 
            HomeForm home = new HomeForm();
            this.Hide();
            home.ShowDialog();
            this.Close();
            user.user_id = dc["id"].ToString();
            user.user_password = dc["name"].ToString();
            user.user_sex = dc["sex"].ToString();
            user.user_psw = dc["psw"].ToString();
        }
    }
}

实现根据数据库判断账号密码登录;限制账号密码十六位输入限制;登录成功页面跳转,密码明暗文转换等功能。

posted @ 2023-12-28 09:54  ywwwik  阅读(40)  评论(0编辑  收藏  举报