一、Win Form入门
WinForm 是 Windows Form 的简称,是基于 .NETFramework 平台的客户端(PC软件)开发技术,一般使用C#编程。在VS2019中,C# WinForm 编程需要创建「Windows窗体应用程序」项目。Windows 窗体应用程序是 C# 语言中的一个重要应用,也是 C# 语言最常见的应用。使用 C# 语言编写的 Windows 应用程序与 Windows 操作系统的界面类似,每个界面都是由窗体构成的,并且能通过鼠标单击、键盘输入等操作完成相应的功能。
二、Win Form项目结构
Properties:该文件夹下包括项目的属性配置文件,如AssemblyInfo.cs、Settings.settings等。
References:该文件夹下包括所引用的程序集和组件。
bin & obj:该文件夹下包括编译生成的可执行文件和中间文件,可以在项目属性中进行配置。
Forms:该文件夹下包括所有的窗体(Form)或对话框(Dialog)类,以及子窗口(ChildForm)等自定义控件。
UserControls:该文件夹下包括所有的用户控件(UserControl),通常用于将常用的界面元素封装起来,以便在多个窗体中复用。
Resources:该文件夹下包括所有的应用程序资源,如图标、位图、声音等。
Helpers:该文件夹下包括所有的辅助类,如配置类、工具类、日志类等,通常用于提供公共的服务和功能。
Models:该文件夹下包括所有的实体类和数据访问对象(DAO),用于表示业务数据和操作数据库。
- Services:该文件夹下包括所有的服务类,用于提供业务逻辑的实现和数据处理的封装。
namespace WinFormsApp1
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}
三、基础项目实战(悠游网咖登录系统)
1.基础控件实现“登录”窗体
当前实现的“登录”窗体并不能接收到用户填写的数据,因此还需要继续完善功能。在HTML中,可以通过表单元素(如<input><select>等标签)显示提示信息,获取用户输入信息,
而在Windows程序中,.NET提供了许多窗体控件来设计窗体。
标签(Label)控件如上图所示用于显示用户不能编辑的文本或者图像,在上图中“悠游网咖”,“登录名”,“密码”等都是标签。
按钮(button)允许用户通过单机执行操作。上图所示“登录”,“退出”都是按钮标签
2.更改控件属性
在visual Studio2022中点击控件找到属性界面,对属性经行修改。
标签的属性分别有:
属性 | 说明 |
Image | 在标签上显示的图像 |
Text | 在标签上显示的文本 |
Font | 可以设置文本的字体、大小、颜色等 |
BackColor | 可以设置标签的背景色 |
文本框的属性:
分类 | 名称 | 说明 |
属性 | MaxLength | 指定可以在文本框中输入的最大字符串 |
Multiline | 表示是否可以在文本框中输入多行文本 | |
PasswordChar | 指示在作为密码框时,文本框中显示的字符 | |
ReadOnly | 指定是否允许编辑文本框中的文本 | |
方法 | Focus() | 将光标定位到当前文本框中 |
按钮的属性:
分类 | 名称 | 说明 |
属性 | Enable | 布尔值,表示控件是否可用 |
Text | 按钮上显示的文本 | |
TextAlign | 按钮上文本的对齐方式 | |
事件 | Click | 单击控件时发生的事件 |
3.实现点击退出
首先,我们双击退出按钮进入到代码页面,使用this.close对整个页面经行关闭。
private void btnExit_Click(object sender, EventArgs e)
{
this.Close()
}
之后我们加上与用户的交互性
private void btnExit_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("确认退出吗?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.Close();
}
if (result == DialogResult.No)
{
return;
}
}
这样我们在点击退出时会出现一个小窗口,来提示我们是否退出,如果点击是则退出整个页面,点击否则我们返回当前页面
在C#中消息框对象被称为MessageBox,使用MessageBox对象的Show()方法可以弹出一个消息框,语法如下:
MessageBox.show(String Text,String Title,MessageBoxButton buttons,MessageBoxIcon icon);
4.实现登录验证事件
此事件我们通常是检验用户名是否填写或者正确,以及密码也是同样的按道理,下面是实现过程:
private bool validInput(string userName, string password)
{
if (userName.Equals(string.Empty))
{
MessageBox.Show("用户名不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtLogin.Focus();
return false;
}
if (password.Equals(string.Empty))
{
MessageBox.Show("密码不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtpassword.Focus();
return false;
}
if (!(password.Length >= 6))
{
MessageBox.Show("密码长度最少6位!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtpassword.Focus();
return false;
}
return true;
}
private bool CheckUser(string userName, string password)
{
if (userName=="www"&&password=="1234567")
{
return true;
}
return false;
}
5.实现窗体的跳转
用户验证成功后,将可以跳转到另一个页面,下面经行代码示例:
private void btnLogin_Click(object sender, EventArgs e)
{
// 获取输入的用户名和密码
string userName = this.txtLogin.Text.ToString();
string password = this.txtpassword.Text.ToString();
// 输入校验
bool isValid = validInput(userName, password);
if (isValid)
{
// 登录
if (CheckUser(userName, password))
{
this.Hide();
FrmMain frmMain = new FrmMain();
frmMain.userName = userName;// 窗体间传值
frmMain.Show();
}
else
{
MessageBox.Show("用户名或密码错误!");
}
}
}
这个过程我们需要另外新建一个窗体,并在窗体里增加一个Label标签。
对这个窗体进行一些设置
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace MyWinFormApp01
{
public partial class FrmMain : Form
{
public string userName;
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void FrmMain_Load(object sender, EventArgs e)
{
this.lblUserName.Text = userName;
}
}
}
最后,就可以实现一个简单的登录流程。
部分代码:
第一个窗体(即主窗体)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyWinFormApp01
{
public partial class Frm : Form
{
public Frm()
{
InitializeComponent();
}
private void lblpassword_Click(object sender, EventArgs e)
{
}
private void btnExit_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("确认退出吗?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.Close();
}
if (result == DialogResult.No)
{
return;
}
}
private void btnLogin_Click(object sender, EventArgs e)
{
// 获取输入的用户名和密码
string userName = this.txtLogin.Text.ToString();
string password = this.txtpassword.Text.ToString();
// 输入校验
bool isValid = validInput(userName, password);
if (isValid)
{
// 登录
if (CheckUser(userName, password))
{
this.Hide();
FrmMain frmMain = new FrmMain();
frmMain.userName = userName;// 窗体间传值
frmMain.Show();
}
else
{
MessageBox.Show("用户名或密码错误!");
}
}
}
private bool validInput(string userName, string password)
{
if (userName.Equals(string.Empty))
{
MessageBox.Show("用户名不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtLogin.Focus();
return false;
}
if (password.Equals(string.Empty))
{
MessageBox.Show("密码不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtpassword.Focus();
return false;
}
if (!(password.Length >= 6))
{
MessageBox.Show("密码长度最少6位!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtpassword.Focus();
return false;
}
return true;
}
private bool CheckUser(string userName, string password)
{
if (userName=="www"&&password=="1234567")
{
return true;
}
return false;
}
private void txtLogin_TextChanged(object sender, EventArgs e)
{
}
}
}
第二个窗体(即跳转后的窗体)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace MyWinFormApp01
{
public partial class FrmMain : Form
{
public string userName;
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void FrmMain_Load(object sender, EventArgs e)
{
this.lblUserName.Text = userName;
}
}
}
谢谢大家,可以留下个免费的关注吗,谢谢
如需要代码,请私信我。