C sharp 控件的使用.docx
《C sharp 控件的使用.docx》由会员分享,可在线阅读,更多相关《C sharp 控件的使用.docx(44页珍藏版)》请在冰豆网上搜索。
Csharp控件的使用
控件的使用
P.S.本章讲解常用控件的使用方法,将不对算法和语法加以解释。
控件
控件是视窗交互的工具。
控件是一种特殊的类,所有控件都继承自System.Windows.Forms.Control类。
这里Control就叫做控件的基类,控件就是Control的派生类。
一个类从基类继承,就拥有基类的所有成员(包括:
变量(亦称字段),属性,函数(函数亦称方法),事件,运算符)。
类之间通过继承关系保证了派生类拥有需要的方法或字段。
所以Control的成员就是控件的通性。
这里列出了Control的常用成员:
名称
类别
用途
Control
构造函数
用于初始化一个控件
Dispose
方法
释放由 Control 使用的所有资源
Equals
方法
判断控件是否相同
Focus
方法
为控件设置输入焦点
GetContainerControl
方法
返回容器控件
GetType
方法
获取控件类型
RaiseDragEvent
方法
引发适当的拖动事件。
RaiseKeyEvent
方法
引发适当的键事件。
RaiseMouseEvent
方法
引发适当的鼠标事件。
RaisePaintEvent
方法
引发适当的绘画事件。
Refresh
方法
强制重绘自己和任何子控件
ResetBackColor
方法
将 背景色重置为其默认值。
ResetCursor
方法
重置光标
ResetFont
方法
重置字体
ResetForeColor
方法
重置前景色
ResetImeMode
方法
重置输入法
Select
方法
激活控件
Show
方法
向用户显示控件
ToString
方法
控件类名转为字符串
Update
方法
使控件重绘其无效区域
AllowDrop
属性
指示控件是否接受拖放数据
BackColor
属性
获取或设置控件的背景色。
BackgroundImage
属性
获取或设置在控件中显示的背景图像
CanFocus
属性
获取一个值,该值指示控件是否可以接收焦点。
Controls
属性
获取包含在控件内的控件的集合
Cursor
属性
获取或设置当鼠标指针位于控件上时显示的光标
Dock
属性
获取或设置哪些控件边框停靠到其父控件并确定控件如何随其父级一起调整大小。
DoubleBuffered
属性
该值指示此控件是否应使用辅助缓冲区重绘其图面,以减少或避免闪烁
Enabled
属性
该值指示控件是否可以对用户交互作出响应
Focused
属性
该值指示控件是否有输入焦点
Font
属性
获取或设置控件显示的文字的字体
ForeColor
属性
获取或设置控件的前景色
Height
属性
获取或设置控件的高度
Location
属性
获取或设置该控件的左上角相对于其容器的左上角的坐标
Margin
属性
获取或设置控件之间的空间
MousePosition
静态属性
获取鼠标光标的位置(以屏幕坐标表示)。
Name
属性
获取或设置控件的名称
Parent
属性
获取或设置控件的父容器
Size
属性
获取或设置控件的高度和宽度
Tag
属性
获取或设置包含有关控件的数据的对象
Text
属性
获取或设置与此控件关联的文本
Visible
属性
该值指示是否显示该控件
Width
属性
获取或设置控件的宽度
BackColorChanged
事件
当 BackColor 属性的值更改时发生
BackgroundImageChanged
事件
当 BackgroundImage 属性的值更改时发生
Click
事件
在单击控件时发生
DoubleClick
事件
在双击控件时发生
DragDrop
事件
在完成拖放操作时发生
GotFocus
事件
在控件接收焦点时发生
KeyPress
事件
在控件有焦点的情况下按下键时发生
LocationChanged
事件
在 Location 属性值更改后发生
LostFocus
事件
当控件失去焦点时发生
MouseClick
事件
在鼠标单击该控件时发生
MouseEnter
事件
在鼠标指针进入控件时发生。
MouseHover
事件
在鼠标指针停放在控件上时发生。
MouseLeave
事件
在鼠标指针离开控件时发生。
MouseMove
事件
在鼠标指针移到控件上时发生
MouseUp
事件
在鼠标指针在控件上并释放鼠标键时发生
MouseWheel
事件
在移动鼠标滚轮并且控件有焦点时发生
Paint
事件
在重绘控件时发生
Resize
事件
在调整控件大小时发生
TextChanged
事件
在 Text 属性值更改时发生
以上是最常用的成员,便于查找,完整列表参考
静态文本控件Label:
表示控件的文本标签,并提供对访问键的支持。
它是最简单的控件,用于显示文字,其实它不一定是静态的,显示的文字可以随时通过Text属性更改。
常用的属性是Font、BackColor、ForeColor、Text、Location、Size、Visible。
超链接文本控件LinkLabel:
Windows窗体 LinkLabel 控件使您能够向Windows窗体应用程序添加Web样式的链接。
一切可以使用 Label 控件的地方都可以使用 LinkLabel 控件;还可以将文本的一部分设置为指向某个对象或网页的链接。
与Label类似,提供了类似超链接的文字样式,Label也可以设置Click事件,但LinkLabel更容易让人发现它被单击有不同的作用(由于它像超链接的样子)。
也可以用作选项,【例】:
1新建工程,设计界面如图:
2修改LinkLabel控件名字:
linkOption
2.1选择
2.2修改(Name)属性
2.3改为linkOption
2.3.1P.S.以后就用linkOption表示这个控件,在C#代码中控件实例实质上是一个变量,变量类型就是控件的类。
这就是这个控件的变量名。
由于默认的名称linkLabel1没有实际意义,编程时通常先修改其名字,使其好记。
由于是变量名所以命名规则与普通变量没有区别,由“_”或英文字母开头都是合法的,不允许重名。
但通常许多控件共同运作来完成一件具体的事,所以通常习惯在控件前面加上小写的类型简称,后跟首字母大写的名称。
这是一条基本技巧,以后不再重复介绍。
3双击linkOption编辑代码
privatevoidlinkOption_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
linkOption.Text=linkOption.Text=="On"?
"Off":
"On";
}
4运行
5多次单击linkOption查看效果。
这里使用了条件运算符来实现这个功能。
文本框TextBox:
表示Windows文本框控件。
文本框是提供用户数据输入输出的控件。
【例】:
求三角形面积
1编辑界面如图
2分别命名为txtA、txtB、txtC、txtArea
3直接开始编辑代码:
3.1新建函数
privatevoidtextBox_Change(objectsender,EventArgse)
{
doublea=0,b=0,c=0,p=0;
try
{
a=double.Parse(txtA.Text!
=""?
txtA.Text:
"0");
b=double.Parse(txtB.Text!
=""?
txtB.Text:
"0");
c=double.Parse(txtC.Text!
=""?
txtC.Text:
"0");
p=(a+b+c)/2;
txtArea.Text=Math.Sqrt(p*(p-a)*(p-b)*(p-c)).ToString();
}
catch(FormatException){txtArea.Text="类型错误";}
}
4设置txtA、txtB、txtC的Click事件处理函数为textBox_Change:
4.1按住Ctrl分别单击txtA、txtB、txtC以同时选择这三个控件
4.2查看事件列表
4.3找到TextChange事件
4.4选择textBox_Change
5运行
6输入一些数字查看运行情况。
还可以修改器PasswordChar属性使其变成密码框,这个属性的类型是char,只可以输入一个字符,用来代替原来显示文字的位置,令其为*或#看看效果吧:
1编辑界面如图
2设置其PasswordChar属性,输入一个字符
3运行
4输入一些文字看看效果
5设置为其他值看看:
如#、X、●、◆、★、■、§。
P.S.这只是表面的现象,不影响Text属性的取值,仍然用Text属性取出或写入字符串。
也可以修改其Dock属性为Top或Bottom,文本框会立即保持与窗口同宽:
1编辑界面如图
2设置Dock属性为Top:
3运行
4改变窗体大小查看效果。
P.S.你可能觉得这与窗体贴的过分地紧了,最好留一点边距,这也有办法,只需修改窗体的Padding属性,改为8,8,8,8试试。
文本框还有Enable、ReadOnly、Visible属性,分别表示是否禁用文本框(变灰)、是否只读(用户不能修改其内容)和是否可见(设为false就不显示)是一些常用属性,其他控件也有,以后不再重复介绍。
Enable=false的效果
还有一个是MultiLine属性,使文本框可以是多行的
将其设为true
效果:
可以访问Lines属性修改其内容。
这时WordWrap属性还可指定它是否自动换行显示
WordWrap=true
WordWrap=false
这样的话显示不全,可更改ScrollBars属性,添加合适的滚动条
ScrollBars=Horizontal
ScrollBars=Vertical
ScrollBars=Both
按钮Button:
表示一个响应 ButtonBase.Click 事件的Windows按钮控件。
通常在鼠标对其操作(单击、双击等)时产生一些事件,并处理。
【例】:
可对上述示例加以修改:
1添加按钮如图
2按钮命名为btnCalc
3令btnCalc.Click=textbox_Change
4清空txtA、txtB、txtC的Click处理函数
5查看代码找到textbox_Change
6选中函数名
7右击
8鼠标指向“重构(R)”->“重命名(R)…”,并单击。
9改名为Calc_Click
10确定
11应用
12运行
13输入数并单击“Calculate”,查看效果
P.S.更改已经定义好的函数名、变量名等标识符的名称请使用“重构->重命名”,它将自动为所有的标识符引用改名以匹配新的名字。
这里的改名不是必要步骤(5-11步),但为了使实例更直观,避免混淆。
复选框CheckBox控件:
表示Windows CheckBox。
它经常用于选项,使用非常简单,只需设定Text(显示的文本),根据需要获取或设置Checked值就可以了,这个属性表示是否勾选,为bool型。
【例】闹钟选项设置
1编辑界面如图
2使复选框的名字依次为chkSun、chkMon、chkTue、chkWed、chkThu、chkFri、chkSat
3使按钮名字依次为btnApply、btnCancel
4添加新的CheckBox[]数组
privateCheckBox[]checkBoxes;
5修改WinForm构造函数:
publicForm1()
{
InitializeComponent();
checkBoxes=newCheckBox[]{
this.chkSun,
this.chkMon,
this.chkTue,
this.chkWed,
this.chkThu,
this.chkFri,
this.chkSat
};
}
6双击Apply编辑Click事件处理函数
privatevoidbtnApply_Click(objectsender,EventArgse){
stringstr="You'veselected:
";
foreach(CheckBoxcbincheckBoxes)if(cb.Checked)str+="\n\t"+cb.Text;
if(str=="You'veselected:
")str+="Nothing";
MessageBox.Show(str);
}
7双击Cancel编辑Click事件处理函数
privatevoidbtnCancel_Click(objectsender,EventArgse)
{
this.Close();
}
8修改WinForm属性
9运行查看效果
P.S.第8步设置了Winform的确定和取消按钮(即AcceptButton和CancelButton属性)可以看到按钮的视图效果会有所改变
Apply按钮多了个蓝框,表示默认按钮,此时按Enter或Esc分别相当于按下了这两个按钮。
这两个属性是专门为对话框按钮设置的简便方式。
这里建立了复选框的数组,用foreach语句遍历。
注意:
对象数组与数值数组有所不同,如果用已经定义的对象来初始化数组,那么元素与对应的对象完全相同(共用了一块内存区)任一一个的改动,会影响另一个的值。
数值数组则仅仅把数值传了过去。
两个对象的等于或不等运算是比较他们的内存地址是否相同,而不是每一个属性是否相同。
对对象的操作需要多加以考虑
复选框还有第三种“待定”的状态,以前叫三态复选框,三种状态是通过CheckState属性获得的:
效果
Checked属性
CheckState属性
True
Checked
True
Indeterminate
False
Unchecked
单选框RadioButton:
当与其他 RadioButton 控件成对出现时,使用户能够从一组选项中选择一个选项
单选框相对复选框较复杂一些,因为用户只能选一个,要把前一个选择的清除;如果有几组单选框,就更复杂。
这就需要一个范围来约束单选框的行为,如果只有一组,它可以正常工作,WinForm会自动清除前一个选项。
如果有多组,就需要容器控件来区分组别。
其中GroupBox是比较常用的。
如图:
这样不需要代码来控制其行为。
由于只有一个选项,所以一般用主动传值的方式。
【例】选择国籍
1编辑界面如图
2单选框无需改名,按钮命名为btnOK、btnCancel
3添加全程变量
privatestringstr="Nothing";
4创建新函数
privatevoidradio_Click(objectsender,EventArgse)
{
str=((RadioButton)sender).Text;
}
5编辑OK按钮Click事件:
privatevoidbtnOK_Click(objectsender,EventArgse)
{
MessageBox.Show("You'veselected:
"+str);
}
6编辑Cancel按钮Click事件:
privatevoidbtnCancel_Click(objectsender,EventArgse)
{
this.Close();
}
7选择全部的单选框
8编辑Click事件
9运行看看效果
数字框NumbericUpDown:
这是一种特殊的输入框,专门用来输入数字,通过Value属性获得其decimal型的值。
使数据的输入更加方便。
右侧有两个按钮可以让数字增加或减少。
【例】汇率换算
1编辑界面如图
2命名数字框为nudDollar和nudRMB
3命名按钮btnD2R、btnR2D
4编辑两个数字框的属性为如图
4.1属性栏下方有解释
所以属性的用途不再介绍。
5编辑btnD2R的Click事件
privatevoidbtnD2R_Click(objectsender,EventArgse)
{
nudRMB.Value=nudDollar.Value*(decimal)6.8352;
}
6编辑btnR2D的Click事件
privatevoidbtnR2D_Click(objectsender,EventArgse)
{
nudDollar.Value=nudRMB.Value/(decimal)6.8352;
}
7运行
下拉菜单ComboBox:
它可使用户从一定的范围内选择一项。
当有大量的选项时,单选框就不实用用了,这样做太复杂。
就应该使用下拉菜单。
但当只有少量选项时还是用单选框对于用户更容易操作。
下拉菜单是一个集合类,下面还是给出一个选国籍的程序
【例】选择国籍
1编辑界面如图
2下拉菜单改名comNation
3找到comNation.Items属性,单击右侧按钮
4输入数据(每一行作为下拉菜单的一个项,也就是集合的一个元素)
5确定
6双击下拉菜单进入comNation_SelectedIndexChanged函数的编辑
privatevoidcomNation_SelectedIndexChanged(objectsender,EventArgse)
{
MessageBox.Show("You'veselected:
"+comNation.SelectedItem.ToString());
}
7运行
可以看到用下拉菜单更加简便,几乎不用多少代码来管理控件行为,随时取值就行了。
然而下拉菜单还提供了大量的函数,可以动态的管理这些元素。
图像容器PictureBox:
PictureBox可以装点你的WInForm,也可以根据需要显示一些图片,让程序看起来跟动态化,互动效果更好。
使用PictureBox也十分容易,主要更改其Image属性,这属性属于Image类的。
一般需要从程序资源中调取图片,这个会在例子下加以介绍。
【例】显示图片
1拖拽出一个PictureBox控件
2右击控件
3单击选择图像
4从项目资源文件中导入图片
4.1单击项目资源文件单选框
4.2
4.3单击导入
4.4选择一张图片
4.5打开
4.6
4.7单击确定
5
6图像导入成功了,可以运行看看效果
这貌似是一个变量名的样子,与工程文件在同一个命名空间中。
其实可以找到他。
1在解决方案资源管理器中找到Properties展开
2打开Resources.resx(这就是资源文件),它内部是xml文件,与C#代码一起运作,这个机制就比较复杂了。
可以看到刚刚添加的图片就在里面
以后也可以通过这个界面来维护添加的资源,资源不仅可以是图片,也可以是声音,文字
【例】在WinForm初始化时通过代码装载图片
1拖拽出一个PictureBox
2按前面的例子向资源文件导入一张图片(此处添加了叫apple的图片)
3双击窗体进入窗体的Load事件编辑代码
privatevoidForm1_Load(objectsender,EventArgse){
pictureBox1.Image=Properties.Resources.apple;//根据实际添加图片资源名称
}
4运行看看效果吧
进度条ProgressBar:
掩码文本框MarkedTextBox:
进度条是一个使用起来十分简单的控件主要改变其Maximun、Minimun、Value属性来简单的调整外观视图。
掩码文本框则是通过掩码来确定用户输入特定格式的文字。
下面例子中同时用到两种控件来实现一个比较直观的定时器。
【例】定时器
1拖拽出一个掩码文本框、一个按钮和一个进度条
2修改名字为maskText、btnSet、progressBar
3
4选择时间格式
5确定——这时掩码文本框的外观已经改变:
6设置progressBar.Value属性为100,可看到进度条满格
7
8在拖拽一个工具箱->组件->
9改名timer
10设置Form的AcceptButton=btnSet
11添加全局变量
DateTimedt=newDateTime(),st=newDateTime();
12双击btnSet以编辑Click事件
privatevoidbtnSet_Click(objectsender,EventArgse)
{
switch(btnSet.Text)
{
case"Set":
try
{
dt=(DateTime)maskText.ValidateText();
st=DateTime.Now;
timer.Enabled=true;
maskText.ReadOnly=true;
btnSet.Text="Pause";
}
catch
{
progressBar.Value=100;
timer.Enabled=false;
dt=newDateTime();
st=newDateTime();
maskText.ReadOnly=false;
this.Text="Timer";
}
break;
case"Pause":
timer.Enabled=false;
maskText.ReadOnly=false;
btnSet.Text="Set";
break;
}
}
13
privatevoidtimer_Tick(objectsender,EventArgse)
{
if((dt-DateTime.Now).TotalMilliseconds>=200)
{
progressBar.Value=(int)(((dt-DateTime.Now).TotalMilliseconds/(dt-st).TotalMilliseconds)*100);
this.Text="SecondsLeft:
"+Math.Round((dt-DateTime.Now