本文主要介绍WinForm的介绍和基本控件的使用的详细说明。通过示例代码非常详细,对大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。
目录
一、WinForm 1简介。WinForm项目结构2。窗口设计和控制布局3。窗口事件4。时间显示练习2。WinForm布局开发1。手动布局解决适应性问题2。WinForm布局属性3。WinForm布局3。Winform公共控件1。界面显示2。实体类学生(封装信息)3。逻辑事件代码形式.
一.Winform入门
WinForm是Windows Form的缩写,是一种基于。net框架平台。一般用C#编程。在VS2019中,C# WinForm编程需要创建一个“Windows窗体应用程序”项目。Windows窗体应用程序是C#语言中的一个重要应用程序,也是C#语言中最常见的应用程序。用C#语言编写的Windows应用程序,类似于Windows操作系统的界面。每个界面由一个表单组成,可以通过鼠标点击、键盘输入等操作完成相应的功能。WinForm支持可视化设计,简单易用,可以访问大量第三方UI库或自定义控件,为桌面应用开发带来无限可能。
1.WinForm项目结构1.WinForm项目结构
(1)引用:包括所有系统库文件的引用依赖。
(2)App.config:当前项目的配置文件
(3)Form1.cs:当前表单的事件逻辑源代码。
-表格1。Designer.cs:当前窗体的控件布局源代码。
-Form1.resx:资源文件(图片、图标、资源等。)的当前形式
-注意:
A.Form1.cs和Form1。Designer.cs都定义了Form1类,该类使用
Partial关键词
声明。已定义的类可以在多个地方定义,并且在最终编译时将被视为一个类。所以两个文件各司其职,最后合并成一个类进行编译。B.若要手动实现自定义窗体,可以添加自己的类,然后继承Form类。
(4)Program.cs:当前项目程序的主入口,启动项目,运行初始窗口。
命名空间WindowsFormsApp_learning
{
//Program.cs入口程序解释
静态类程序
{
///摘要
///应用程序的主入口点。
////摘要
//1.[stat thread]属性语法,修改Main方法。应用程序的默认线程模型是单线程单元(STA)。
[静态线程]
静态空干管()
{
申请。enablevisual styles();
申请。setcompatibleextrenderingdefault(false);
//2.打开窗口的消息循环,初始化并启动Form1窗口。
申请。run(new form 1());
}
}
}
2.窗口设计与控件布局2.表单控件布局文件
(1)操作:在设计界面中拖拽控件,完成界面布局(控件大小、名称、类型、样式等。)(2)原理:设计界面自动关联Form1。Designer.cs文件,相关代码会在InitializeComponent()方法中自动生成。
(3)设计原则:
-表格1。Designer.cs文件:表单控件的布局文件,一般【我们不需要修改】,会通过设计界面代码自动生成。
-Form1.cs文件:表单事件的逻辑代码的实现,一般【我们需要手动编写】,包括触发事件、回调、数据交互、跳转等等。
3.手动添加控件:在没有设计界面的情况下,有两种方法可以做到这一点。
(1)在表格1中添加。设计师. cs:
私人系统。windows . forms . button BTN _ design;//声明控件
//默认控件初始化方法
InitializeComponent():{
this.btn_design=新系统。windows . forms . button();//定义控件
This.btn_design。Text=“自定义控件”;//设置文本属性
this.btn_design。位置=新点(40,40);//设置布局位置点(x,y)
this.btn_design。Size=新尺寸(100,40);//设置尺寸大小(宽度、高度)
这个。controls . Add(this . BTN _ design);//将控件注册到窗体
}
(2)在Form1.cs中添加:
私按钮btn _ design//声明控件
公共表单1(){
//首先调用Designer.cs中的控件初始化方法
initialize component();
this.btn_design=新系统。windows . forms . button();//定义控件
This.btn_design。Text=“自定义控件”;//设置文本属性
this.btn_design。位置=新点(40,40);//设置布局位置点(x,y)
this.btn_design。Size=新尺寸(100,40);//设置尺寸大小(宽度、高度)
这个。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)控制台。3)GUI界面中不显示WriteLine,所以需要使用调试模式。
命名空间WindowsFormsApp_learning
{
/**
* 4.WinForm事件处理
* (1)操作:在设计界面-控件属性-闪电符号(event)中增加一个事件,自动生成对应方法名称的事件触发函数。
* (2) MessageBox:显示消息提示框。
* (3)控制台。GUI界面中不显示WriteLine,因此需要使用调试模式。
*/
公共分部类Form1 : Form
{
公共表单1()
{
initialize component();
}
//按钮的Click click事件(自动添加)
私有void showMessage(对象发送方,EventArgs e)
{
MessageBox。显示(“你好,世界!”);
}
}
}
5.手动添加事件处理(以Btn_design为例)
(1)步骤:
向布局中添加一个按钮控件
编写事件处理函数,它必须符合void function _ name (object param1,eventargs e) {}的形式
添加注册事件this . BTN _ design . click=new eventhandler(this . show tip);
(2)注意:事件处理机制用的是委托和事件的C#基础,有时间可以看看。
下一步,请转到WindowsFormAPP_demo1(实现一个显示当地时间的应用程序)
命名空间WindowsFormsApp_learning
{
/**
* 5.手动添加事件处理(以Btn_design为例)
* (1)步骤:
*-向布局添加按钮控件
*-编写事件处理函数,该函数必须符合void function _ name (object param1,eventargs e) {}的形式
*-添加注册事件this . BTN _ design . click=new eventhandler(this . show tip);
* (2)注意:事件处理机制使用了委托和事件的C#基础,有时间可以看看。
*下一步请到WindowsFormApp_demo1(实现一个显示时间的App)。
*/
公共分部类Form1 : Form
{
公共表单1()
{
initialize component();
//2.1将点击事件注册为手动添加的函数
这个。Btn _设计。click=new EventHandler(this . show tip);
}
//2.单击按钮的单击事件(手动添加)
公共void showTip(对象发送方,EventArgs e)
{
MessageBox。显示(手动添加!);
}
}
}
4.时间显示器小练习设计一个时间查看器,可以获取当地时间并显示在文本框中。设计思路是:
1.添加一个按钮按钮和一个文本框,在UI设计界面显示时间。
2.向按钮Button添加一个click事件,获取事件中的系统时间,并将其分配给TextBox进行显示。
(1)界面设计
(2)逻辑代码
命名空间WindowsFormsApp_Demo1
{
公共分部类Form1 : Form
{
公共表单1()
{
initialize component();
}
//点击事件:获取当前时间,赋给TextBox。
私有void ShowTime(对象发送方,EventArgs e)
{
字符串时间=日期时间。now . ToString( yyyy-MM-DD HH:MM:ss );
这个。时间存档。Text=time
}
}
}
二.WinForm布局开发
1.常见的WinForm 自动界面布局(设计界面拖拽布局)
(1)操作:
拖拽控件放置在UI设计界面进行布局。(2)技巧:
通过ctrl选择多个控件,并在上部工具栏中微调对齐的细节,如居中对齐和左对齐。010-5900每次你拖拽添加一个布局控件时,布局代码(如位置,大小等。)会在
(3)本质:
方法中自动生成对应窗口的Designer.cs设计布局代码文件来实现布局。InitializeComponent()
自动布局方便灵活,但当窗口大小拉伸变化时,布局控件无法自动适应,仍会保持原来的大小,所以自动布局只适用于窗口大小不变的情况。1. 手动布局解决自适应问题(4)存在的问题:
2.WinForm界面手动布局(并解决自适应问题)
-通过在设计界面中拖拽/手动注册组件来初始化初始界面布局(此时属于自动布局)。
-在Form.cs的逻辑代码中重写Form的父类的
(1)步骤:
方法,并在方法内实现手动布局。当窗口大小发生变化时,会自动回调OnLayout方法,从而重置组件的位置和大小等属性,实现自适应。A.没有必要调用父类的OnLayout()。
B.获取当前窗口大小(只有客户区,不包括标题栏)
c .计算并设置每个控件的新尺寸和位置,实现动态布局。
OnLayout
-Size属性指的是窗口大小(包括工具栏),ClientSize指的是工作区大小(不包括工具栏)。
-本质:窗口大小变化时会自动调用OnLayout方法来设置组件的位置,实现自适应。
命名空间WindowsFormsApp_learning
{
公共分部类Form1 : Form
{
公共表单1()
{
initialize component();
}
//重写父类的OnLayout方法,实现手动布局自适应。
受保护的覆盖void OnLayout(layout eventargs levent)
{
//1.调用父类的OnLayout(),这不是必需的。
基地。OnLayout(levent);
//2.获取当前客户窗口大小ClientSize
int w=this。ClientSize . Width
int h=this。ClientSize . Height
//3.计算并设置每个控件的大小和位置。
int yoff=0;
yoff=4;
this.text_box位置=新点(0,yoff);//坐标(0,4)
this.text_box尺寸=新尺寸(w - 80,30);//尺寸(宽80,30)
this.btn_click。位置=新点(w - 80,yoff);//坐标(w-80,4)
this.btn_click。Size=新尺寸(80,30);//大小(80,30)
yoff=30//第一行的高度
yoff=4;//间隔
this.panel1.Location=新点(0,yoff);
this.panel1.Size=新尺寸(w,h-yoff-4);
}
}
}
2.WinForm布局属性(2)注意:
3.WinForm布局属性(控件与布局相关的属性,设计界面可见)
固定,锚定(无论窗口如何变化,控件的相对位置保持不变)-含义:固定控件和父窗口的【上、下、左、右边距】不变,从而实现控件的锚定。
-固定左上角:顶部,左侧(默认)被选中。
-顶部固定,水平拉伸:选择顶部、左侧、右侧
-中心固定:无(全部取消)
(1)Anchor:
锚点效果取决于控件的初始位置,因为控件的初始位置决定了控件的边距!所以要把控件固定在右上角,在初始设计的时候就应该放在右上角!- *注意:
停靠属性将控件停靠在父窗口的一侧或中央。-Top:控件停靠在容器的上侧,宽度填充容器,高度可以调整。
-Bottom:控件停靠在容器的下侧,宽度填充容器,高度可以调整。
-Left: left,控件停靠在容器的左侧,高度填充容器,宽度可以调整。
-Right: right,控件停靠在容器的右侧,高度填充容器,宽度可以调整。
-Fill,控件填充容器中间的
(2)Dock:
部分(所以和添加控件的顺序有关)。-None,None,不使用Dock属性。
剩余
A.容器可以与布局属性嵌套(容器用于存储组件,如面板)
B.Dock属性和Anchor属性不能同时使用。
C.Dock属性是固定边距或相对位置填充。
3.WinForm布局器- *注意:
4.布局器 LayoutEngine
布局是容器内部组件的默认排列,所有容器都有默认布局。(1)含义:
-工具-选项-Windows窗体设计器-常规-自动填充工具箱-True
-向项目中添加自定义控件类源代码。
-生成/重新生成结束方案F7
-重新打开设计界面,在工具箱中可以看到自己的控件。
(2)自定义控件如何加入设计界面:
-含义:常见的面板容器控件使用FlowLayout流布局,即所有内部组件从左到右、从上到下依次排列。
-FlowLayoutPanel也可以使用Anchor和Dock等属性,因为它也是表单容器中的一个组件。
(3)系统提供的布局器-FlowLayoutPanel(流式布局):
当多个控件堆叠在一起时,可以右键单击顶部的控件来选择重叠的控件。- 控件的选择技巧:
-含义:通用面板容器使用TableLayout表布局,即所有内部组件可以放在不同的表中(每个表中只能放一个控件)
-TableLayoutPanel也可以使用Anchor和Dock等属性,因为它也是表单容器内的一个组件。使用布局和布局属性,可以实现许多不同的布局效果。
-删除/添加行和列:右键单击表格面板来添加和删除行和列。
-调整表格大小:表格属性列可以通过绝对值、百分比、自动调整等方式调整单元格大小。
A.绝对:固定像素值大小
B.百分比:去除绝对大小后,大小为
(4)系统提供的布局器-TableLayoutPanel(表格布局):
的单元格所占的百分比。C.自动调整:根据内部控制的大小生成。
-跨行/列控件:在控件的ColumnSpan/RowSpan中调整控件,可以跨行/列布局。
剩余
TableLayoutPanel控件每个单元格只能包含一个子控件。- *注意:
默认布局可以通过拖动控件来放置,也可以通过使用锚定和停靠来调整。(5)系统提供的布局工具-默认布局:
用户可以自行设计实现版面,属于WinForm的高级内容。以后再学。三.WinForm常用控件
(6)自定义布局器:
1.Winform 组件的使用
-常用属性:大小、单/多行、密码输入PasswordChar、只读ReadOnly、显示/获取文本Text等。
-常见事件:KeyPress按键(通常用于输出结束时按enter,box。Text获取输入值,event e.keyChar获取哪个键被按下)
(1)TextBox:输入文本框
-常用属性:大小、显示文本、选中的选中的选中的?
-常见事件:Click事件,CheckedChanged检查状态更改事件。
(2)CheckBox:复选框
-共同属性:
A.添加数据项:设计师编辑添加(属性-数据项,一行代表一个数据项),程序手动添加(组合框。items . Add( some );)
B.其他设置:大小、文本提示文本等。
-常见事件:
A.获取选中项:SelectedItem(选中项的值)和SelectedIndex(选中项的索引,-1表示未选中)
B.选项更改事件:SelectedIndexChanged
-注意:Item可以添加字符串或任何对象类型(如自定义对象),对象将显示为object.toString
(3)ComboBox:下拉列表(只能单选)
-通用属性:SelectionMode(单选/多选模式)
A.无线电模式采集选项:SelectedItem/SelectedIndex(所选项目的值/索引)
B.多项选择模式获取选项:选定的索引/选定的项目(选定项目的索引集/值集)
C.添加数据项:设计师编辑和添加(属性-数据项)和程序手动添加(列表框。items . Add( some );)
-常见事件:SelectedIndexChanged。
-注意:Item可以添加字符串或任何对象类型(如自定义对象),对象将显示为object.toString
(4)ListBox:列表框(展示数据、可单选/多选)
1.界面展示2.实体类 Student(封装信息)(5)练习:学生信息编辑器实例(本代码)
1.C# 类的属性与字段
字段是类的成员变量,用于类内特性的数据存储(静态),比如private int Id(1)字段:
属性是字段特征的动态描述,用于向外界提供数据。它本质上是一个获取和设置方法。-完整属性用法:
私有字符串sdu _ name//声明该字段
public student name {//声明一个属性
get { return sdu _ name}
设置{
if(value==null)sdu _ name= admin ;
sdu _ name=value
}
}
-get访问器:get访问器必须包含返回字段“realValue”的return语句。用于获取数据。如果没有GET,则该字段是只写的
-set访问器:set访问器接受其输入参数值,并将其赋给字段。值是一个隐式参数。用于设置数据,如果没有设置,该字段为只读。
(2)属性:
使用类。StudentName直接获取和设置数据,就像直接使用暴露的属性一样。(3)使用方式:
-用法:公共数据类型属性名称{ get设置;}
-*原理:c#只允许声明没有后台字段的属性,编译器会创建隐藏的后台字段。并自动链接到get、set访问器。
(4)自动属性:简化字段和属性的关系
-属性可以不与字段关联,可以作为复杂计算的函数,更加自由灵活。
-属性也可以直接用于存储数据,而无需显示和声明相应的字段。(自动属性)
-您还可以定义其他set和get函数来访问私有字段。
命名空间WindowsFormsApp_learning
{
班级学生
{
//属性访问器
public int SduId { get设置;}
公共字符串SduName { get设置;}
public bool SduSex { get设置;}
公共字符串SduPhone
{
get设置;
}
public Student(int sduId,string sduName,bool sduSex,string sduPhone)
{
SduId=sduId
SduName=sduName
SduSex=sduSex
SduPhone=sduPhone
}
公共学生()
{
}
}
}
3.逻辑事件代码Form.cs命名空间WindowsFormsApp_learning
{
公共分部类Form4 : Form
{
公共表单4()
{
initialize component();
//初始化数据
load data();
}
/**
*保存按钮触发事件-保存学生信息到本地文件。
*/
私有void save_student(对象发送方,EventArgs e)
{
学生学生=新生();
学生。SduId=Convert。ToInt32(sdu_Id。text . Trim());//转换格式转换
学生。SduName=sdu_Name。text . Trim();
学生。SduSex=(sdu_sex。SelectedIndex==1);
学生。SduPhone=sdu_phone。text . Trim();
//以Json格式保存到本地文件
string JsonStr=JsonConvert。SerializeObject(student,格式化。缩进);
AfTextFile。Write(student.txt ,JsonStr,AfTextFile)。UTF8);
MessageBox。显示(操作成功);
}
//读取文件并加载数据
私有void LoadData()
{
string JsonStr=AfTextFile。Read(student.txt ,AfTextFile。UTF8);
if (JsonStr==null)返回;
学生student=JsonConvert。反序列化object student(JSON str);
sdu_Id。Text=转换。ToString(学生。SduId);
sdu_Name。Text=学生。SduName
sdu_sex。SelectedIndex=学生。SduSex?1:0;
sdu _电话。Text=学生。SduPhone
}
}
}
四.图片框与项目资源
(5)注意:
1.图片框与资源
(1)添加资源来源:
本地资源路径,如 DResources123.jpg (注意使用Windows路径格式)- 本地文件 :
properties/resources . resx(在项目资源文件夹下)A.如何添加项目资源文件:双击Properties/Resources.resx-添加资源-添加现有文件-选择本地图片-重命名(标准化,以后使用资源时直接调用名称使用资源)
B.可以添加哪些类型的资源:字符串、文本文档、图片、视频、音频等。
C.原理:Resources.resx将添加的资源集成到项目exe中,所以即使删除源文件也不会影响项目运行。当资源被调用时,它们被自动生成的方法获取。
D.优点:将资源统一到项目中,可以通过标准化命名直接调用资源。
E.用途:通过属性。资源资源名称;直接调用你的资源,方便快捷。
- 项目资源文件:
如 3358baidu/image/meinv.jpg- 网络资源:
-C#提供图像抽象类作为所有图像资源的通用术语。
-C#提供了Image抽象类的具体实现类Bitmap(位图,像素图)来具体加载和读取图像。
A.比如bitmap img=new bitmap( d resources 123 . jpg );
B.比如bitmap img=properties . resources . img _ conv;
(2)图片资源加载类:
-大小、位置属性:大小、位置
-Image属性:图像资源(可以通过本地/项目资源文件导入)
-SizeMode属性:图片的适配模式(StretchImage将图片拉伸到与图片框相同的大小,缩放等。)
-ErrorImage,InitialImage属性:加载失败前显示的图片,显示加载图片。
(3)图片框控件:PictureBox
拖动设计中的PictureBox并配置属性。(4)图片框控件可视化配置:
位图img=属性。resources . img _ conv;//读取图片资源
图片框。Image=img//手动设置图片框控件的图片来源。
图片框。SizeMode=PictureBoxSizeMode。缩放;//手动设置图片格式
1.添加资源2.图片框控件展示界面设计就是简单的放置一个
(5)图片框代码手动配置:
控件,没有过多的设计。来源设置使用代码法,因为在以后的开发中,图片往往不是固定的,需要动态变化,所以建议使用代码法动态设置图片来源。命名空间WindowsFormsApp_learning
{
公共分部类Form2 : Form
{
公共表单2()
{
//初始化所有组件
initialize component();
//初始化PictureBox控件-图片资源
位图img=属性。resources . img _ conv;
图片框。Image=img
图片框。SizeMode=PictureBoxSizeMode。缩放;
}
}
}
关于WinForm的介绍和基本控件的详细说明,本文到此结束。有关WinForm介绍的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!