基础篇——登录页面制作
一、项目介绍
Visual Studio制作上位机软件,此文档仅是软件学习笔记,有不对的地方还请大佬指正!
1.软件环境
①. 软件:Visual Studio 2022 V17.14 社区版;
②. 系统:Windows10 22H2
②. 编程语言:C#(学习资源);
③. 制作内容:WinForm窗口软件;
2.完成目标
①. 完成账户密码登录
②. 登录成功后跳转到新页面
二、项目步骤
1. 前情提要
①. 项目模板选择
由于制作的是Windows窗口软件,所以选择的模板是“Windows窗体应用”
②. Windows窗体应用(.NET)和Windows窗体应用(.NET Framework)如何选择?
主要区别对比
| 项目模板 | Windows窗体应用(.NET Framework) | Windows窗体应用(.NET) |
|---|---|---|
| 运行平台 | 仅Windows | 跨平台(Windows、Linux、macOS) |
| 依赖环境 | 需要安装.NET Framework运行时 | 可独立部署((单个exe文件),包含运行时 |
| 开发技术 | 传统的Windows Forms | 现代化的Windows Forms |
| 性能 | 相对较慢 | 更快,优化更好 |
| 未来支持 | 维护模式,不再新增功能 | 持续更新和发展 |
| 包管理 | NuGet包(部分较旧) | 新的NuGet包,更活跃 |
③. 本项目模板选择
Windows窗体应用(.NET)
理由:
- ①串口编程支持更好
- ②部署更方便
- 可以生成单个exe文件,包含所有依赖
- 用户不需要额外安装.NET Framework
- ③性能优势
- 启动更快,内存占用更少
- 对串口数据处理更高效
- 这是微软主推的方向
- 有长期支持计划
- 大部分.NET Framework的教程都适用于.NET
- 串口库完善:System.IO.Ports在.NET中功能完整
- 大部分.NET Framework的代码可以直接在.NET中使用
- 如果有不兼容的第三方库,通常都有.NET版本替代
2. 创建窗体
①打开visual studio2022后,点击“创建新项目”


②配置项目


③安装扩展库——Fitten Code(可以使用Ai修改bug之类的参考)简单项目暂时用不到,可以直接跳到第④步


④修改窗体基本属性



Form窗体属性介绍(只介绍本项目会用到的)

- Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体
- StartPosition属性:用来获取或设置运行时窗体的起始位置。我想要居中显示,所以选择的是CenterScreen

- Icon属性:给此窗体添加图标(图标文件一定要是 “.con”)
- MaximizeBox属性:最大化按钮是否显示(作为登录页面,建议改成False)

- BackgroundImage属性:用来获取或设置窗体的背景图像
- Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。
⑤添加按钮及输入框

- 控件参数(便于在代码中识别或使用控件)
- Button属性(登录按钮)
- Name:LoginButton
- Text:登录
- Lable1属性(账号输入框旁边的提示文本)
- Name:AccountLable
- Text:账号
- Lable2属性(密码输入框旁边的提示文本)
- Name:PasswordLable
- Text:密码
- TextBox1属性(账号输入框):
- Name:AccountTextBox
- TextBox2属性(密码输入框):
- Name:AccountTextBox
- 简单调整后的页面




也可以双击登录按钮跳转到代码页面
⑥添加新的窗体作为主窗体



3.添加相关代码
①账号密码输入正确后关闭窗口(退出程序)
- LoginDemoForm.cs中的完整代码
namespace LoginDemo//命名空间
{
public partial class LoginDemoForm : Form//继承Form
{
public LoginDemoForm()//构造函数
{
InitializeComponent();//初始化组件
}
/// <summary>
/// 登录按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoginButton_Click(object sender, EventArgs e)//登录按钮事件
{
string username = AccountTextBox.Text;//获取账号
string password = PasswordTextBox.Text;//获取密码
if (username == "admin" && password == "password")//判断账号密码是否正确
{
MessageBox.Show("登录成功");//弹出提示框
this.Close();//关闭当前窗体,可也用this.Hide()
}
else//账号密码错误
{
MessageBox.Show("账号或密码无效");//弹出提示框
}
}
}
}
②登录成功后关闭登录窗体,打开主窗体
- 在编写主要代码之前要先了解this.Close() 与 this.Hide() 的区别
| this.Close() | this.Hide() |
|---|---|
| 完全关闭窗体并释放资源 | 只是隐藏窗体,不释放资源 |
| 窗体实例将被销毁,无法再次显示 | 窗体实例仍然存在于内存中 |
| 内存占用更少 | 可以通过 Show() 再次显示 |
| Application.Run() 会立即返回,程序继续执行 | Application.Run() 不会返回,程序会卡住 |
- 在 Program.cs 中的表现:
- this.Close()
Application.Run(new LoginForm()); // 这里会返回
if(FormHelper.LoginSuccessful)
{
Application.Run(new MainForm()); // 然后执行这里
}
- this.Hide()
Application.Run(new LoginForm()); // 这里不会返回!
if(FormHelper.LoginSuccessful) // 这行代码不会执行
{
Application.Run(new MainForm());
}
- 功能实现方案
- 方案1:使用 this.Close()+ Program.cs 控制(当前代码结构)
- LoginDemoForm.cs中的完整代码
namespace LoginDemo//命名空间
{
public partial class LoginDemoForm : Form//继承Form
{
public LoginDemoForm()//构造函数
{
InitializeComponent();//初始化组件
}
public class FormHelper//内部类
{
public static bool LoginSuccessful = false;//登录成功标志
}
/// <summary>
/// 登录按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoginButton_Click(object sender, EventArgs e)//登录按钮事件
{
string username = AccountTextBox.Text;//获取账号
string password = PasswordTextBox.Text;//获取密码
if (username == "admin" && password == "password")//判断账号密码是否正确
{
MessageBox.Show("登录成功");//弹出提示框
FormHelper.LoginSuccessful = true;//设置登录成功标志;
this.Close();//关闭当前窗体
}
else//账号密码错误
{
MessageBox.Show("账号或密码无效");//弹出提示框
}
}
}
}
- Program.cs中的代码
using static LoginDemo.LoginDemoForm;//引用命名空间
namespace LoginDemo//命名空间
{
internal static class Program//类名
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()//主函数
{
ApplicationConfiguration.Initialize();//初始化应用程序配置
Application.Run(new LoginDemoForm());//运行登录窗体
if (FormHelper.LoginSuccessful)//如果登录成功
{
Application.Run(new MainForm());//运行主窗体
}
}
}
}
- 方案2:修改 Program.cs 使用对话框方式
- LoginDemoForm.cs中的完整代码
namespace LoginDemo//命名空间
{
public partial class LoginDemoForm : Form//继承Form
{
public LoginDemoForm()//构造函数
{
InitializeComponent();//初始化组件
}
/// <summary>
/// 登录按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoginButton_Click(object sender, EventArgs e)//登录按钮事件
{
string username = AccountTextBox.Text;//获取账号
string password = PasswordTextBox.Text;//获取密码
if (username == "admin" && password == "password")//判断账号密码是否正确
{
MessageBox.Show("登录成功");//弹出提示框
this.DialogResult = DialogResult.OK;//设置窗体返回值
this.Close();//关闭当前窗体
}
else//账号密码错误
{
MessageBox.Show("账号或密码无效");//弹出提示框
}
}
}
}
- Program.cs中的代码
using static LoginDemo.LoginDemoForm;//引用命名空间
namespace LoginDemo//命名空间
{
internal static class Program//类名
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()//主函数
{
ApplicationConfiguration.Initialize();//初始化应用程序配置
using (LoginDemoForm loginForm = new LoginDemoForm())//使用using语句自动释放资源
{
if (loginForm.ShowDialog() == DialogResult.OK)//如果登录成功
{
Application.Run(new MainForm());//运行主窗体
}
}
}
}
}
- 总结
- 推荐使用 this.Close():
- 释放不必要的资源
- 符合窗体生命周期管理
- 避免内存泄漏
4.代码添加完成后点击运行调试
上述方法1和方法2调试的结果都是一样的

5513

被折叠的 条评论
为什么被折叠?



