WinForm(⼀)WinForm⼊门与基本控件使⽤
⼀.Winform⼊门
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,⼀般使⽤  编程。在VS2019中,C# WinForm 编程需要创建「Windows窗体应⽤程序」项⽬。Windows 窗体应⽤程序是 C# 语⾔中的⼀个重要应⽤,也是 C# 语⾔最常见的应⽤。使⽤ C# 语⾔编写的 Windows 应⽤程序与 Windows 操作系统的界⾯类似,每个界⾯都是由窗体构成的,并且能通过⿏标单击、键盘输⼊等操作完成相应的功能。WinForm⽀持可视化设计,简单易上⼿,并可以接⼊⼤量的第三⽅UI库或⾃定义控件,给桌⾯应⽤开发带来了⽆限可能。
1.WinForm项⽬结构
1.WinForm项⽬结构
(1)引⽤:包括所有的系统库⽂件的引⽤依赖
(2)fig:当前项⽬的配置⽂件
(3)Form1.cs:当前窗体的事件逻辑源码
- Form1.Designer.cs:当前窗体的控件布局源码
- sx:当前窗体的资源⽂件(图⽚、图标、资源等)
- 注意:
a.Form1.cs和Form1.Designer.cs都定义了Form1类,该类使⽤了Partial关键词声明,其定义的类可以在多个地⽅被定
义,最后编译的时候会被当作⼀个类来处理。因此两个⽂件各司其职,最后合并为⼀个类编译。
b.要⼿动实现⾃定义窗体,可以添加⾃⼰的类,然后继承Form类即可
(4)Program.cs:当前项⽬程序的主⼊⼝Main,启动项⽬,运⾏初始窗⼝
namespace WindowsFormsApp_learning
{
//Program.cs ⼊⼝程序解读
static class Program
{
/// <summary>
/// 应⽤程序的主⼊⼝点。
/// </summary>
//1.[STAThread]  Attributes语法,修饰Main⽅法。⽰应⽤程序的默认线程模型是单线程单元 (STA)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//2.开启窗⼝的消息循环,初始化并启动Form1窗⼝
Application.Run(new Form1());
}
}
}
2.窗⼝设计与控件布局
2.窗体控件布局⽂件
(1)操作:在设计界⾯拖拽控件,可以完成界⾯布局(控件⼤⼩、名称、类型、样式等)  (2)原理:设计界⾯⾃动关联Form1.Designer.cs⽂件,在InitializeComponent()⽅法中会⾃动⽣成相关代码
(3)设计原则:
- Form1.Designer.cs⽂件:窗体控件布局⽂件,⼀般【不需要我们修改】,只要通过设计界⾯代码就会⾃动⽣成。
- Form1.cs⽂件:窗体事件逻辑代码的实现,⼀般【需要我们⼿动书写】,包括触发事件、回调、数据交互、跳转等等
3.⼿动添加控件:不通过设计界⾯,有两种⽅式
(1)在Form1.Designer.cs中添加:控件的使用
private System.Windows.Forms.Button btn_design;//声明控件
//默认的控件初始化⽅法
InitializeComponent():{
this.btn_design = new System.Windows.Forms.Button();//定义控件
this.btn_design.Text = "⾃定义控件";//设置Text属性
this.btn_design.Location = new Point(40,40);//设置布局位置 Point(x,y)
this.btn_design.Size = new Size(100,40);//设置尺⼨⼤⼩ Size(width,height)
this.Controls.Add(this.btn_design);//注册控件到窗体
}
(2)在Form1.cs中添加:
private Button btn_design;//声明控件
public Form1(){
//先调⽤Designer.cs中的控件初始化⽅法
InitializeComponent();
this.btn_design = new System.Windows.Forms.Button();//定义控件
this.btn_design.Text = "⾃定义控件";//设置Text属性
this.btn_design.Location = new Point(40,40);//设置布局位置 Point(x,y)
this.btn_design.Size = new Size(100,40);//设置尺⼨⼤⼩ Size(width,height)
this.Controls.Add(this.btn_design);//注册控件到窗体
}
(3)注意:
1. ⼀般我们都使⽤拖拽添加控件,当然也有特殊情况需要我们⼿动添加(⽐如⾃定义控件)
2. 窗体GUI中,左上⾓为原点(0,0),竖直向下为y轴,⽔平向右为x轴(宽度表⽰x轴上长度,⾼度表⽰y轴上长度),单位为像
素。
3.窗⼝事件
4.WinForm ⾃动添加事件处理
(1)操作:在设计界⾯-控件属性-闪电符号(事件)-添加事件,就会在Form1.cs中⾃动⽣成该控件相应⽅法名称的事件触发函数  (2) MessageBox.Show():显⽰弹出消息提⽰框
(3)GUI界⾯下Console.WriteLine不显⽰,需要使⽤调试模式
/**
* 4.WinForm事件处理
*  (1)操作:在设计界⾯-控件属性-闪电符号(事件)-添加事件,就会⾃动⽣成相应⽅法名称的事件触发函数    *  (2) MessageBox:显⽰消息提⽰框
*  (3)GUI界⾯下Console.WriteLine不显⽰,需要使⽤调试模式
*/
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Button的Click点击事件(⾃动添加)
private void showMessage(object sender, EventArgs e)
{
MessageBox.Show("Hello World!");
}
}
}
/**
* 5.⼿动添加事件处理(以Btn_design为例)
*  (1)步骤:
*      - 添加按钮控件到布局
*      - 书写事件处理函数,必须符合 void function_name(object param1,EventArgs e){}的形式    *      - 添加注册事件,this.Btn_design.Click += new EventHandler(this.showTip);
*  (2)注意:事件处理机制⽤到了委托和事件的C#基础,有时间可以看⼀下
*  下⼀步的学习请前往 WindowsFormApp_demo1(实现⼀个显⽰时间的APP)
*/
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//2.1 注册Click事件为⼿动添加的函数
this.Btn_design.Click += new EventHandler(this.showTip);
}
//2.Button的Click点击事件(⼿动添加)
public void showTip(Object sender,EventArgs e)
{
MessageBox.Show("⼿动添加!");
}
}
}
4.时间显⽰器⼩练习
设计⼀个能获取本地时间并显⽰在⽂本框的时间查看器,设计思路就是:
1.在UI设计界⾯添加⼀个按钮Button和⼀个⽤来显⽰时间的⽂本框TextBox
2.给按钮Button添加点击事件,在事件中获取系统时间,并赋值给TextBox显⽰(1)界⾯设计
(2)逻辑代码
namespace WindowsFormsApp_Demo1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//点击事件:获取当前时间赋值给TextBox
private void ShowTime(object sender, EventArgs e)
{
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
this.Time_filed.Text = time;
}
}
}
⼆.WinForm布局开发
1.常见的WinForm ⾃动界⾯布局(设计界⾯拖拽布局)
(1)操作:拖拽控件,放置在UI设计界⾯上布局
(2)技巧:通过ctrl+多个控件选定,可以在上⽅⼯具栏进⾏细节的对齐微调,⽐如居中对齐、左对齐等。
(3)本质:每次拖拽添加⼀个布局控件,就会在窗⼝相应的Designer.cs设计布局代码⽂件中的InitializeComponent()⽅法中⾃动⽣成布局代码(⽐如Location、Size等),来实现布局。
(4)存在的问题:⾃动布局虽然⽅便灵活,但是当窗⼝⼤⼩拉伸改变时,布局控件不能实现⾃动适应,仍会保持原⼤⼩,因此⾃动布局只适⽤于窗⼝⼤⼩不变的情况

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。