winform界面控件,winform菜单控件

winform界面控件,winform菜单控件,WinForm入门与基本控件使用详解

本文主要介绍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介绍的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

winform界面控件,winform菜单控件