Visual Studio学习制作上位机软件

一、项目介绍

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后,点击“创建新项目”

打开visual studio2022后,显示的页面
点击创建项目后的页面

②配置项目

项目配置
项目框架选择

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

在这里插入图片描述
在这里插入图片描述

④修改窗体基本属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

建议查看此大佬的详细介绍:https://blog.csdn.net/weixin_44788542/article/details/130337169?fromshare=blogdetail&sharetype=blogdetail&sharerId=130337169&sharerefer=PC&sharesource=Struggling_S&sharefrom=from_link

在这里插入图片描述

  • 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调试的结果都是一样的

三、项目完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值