实现登录页与主页切换
我们做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() 这两个方法用于控制窗体的显示和关闭行为,但它们之间存在一些重要的区别。
-
this.Hide():
- 当调用 this.Hide() 方法时,窗体将从用户界面中隐藏,但它仍然驻留在内存中。这意味着如果用户点击一个按钮或其他操作来重新显示这个窗体,该窗体将恢复到之前的状态(如果它是一个表单)。
- 隐藏的窗体仍然可以响应事件,例如按钮点击或焦点事件。
- this.Hide()通常用于隐藏模态对话框或需要从用户界面中暂时移除的窗体。
-
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(); } } }
实现根据数据库判断账号密码登录;限制账号密码十六位输入限制;登录成功页面跳转,密码明暗文转换等功能。
本文作者:ywwwik
本文链接:https://www.cnblogs.com/ywwwik/p/17932046.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步