第05章 Windows窗体界面设计.docx
- 文档编号:4297002
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:65
- 大小:1.12MB
第05章 Windows窗体界面设计.docx
《第05章 Windows窗体界面设计.docx》由会员分享,可在线阅读,更多相关《第05章 Windows窗体界面设计.docx(65页珍藏版)》请在冰豆网上搜索。
第05章Windows窗体界面设计
第5章Windows窗体界面设计
在项目开发中,界面设计是一个非常重要的方面,因为它是获取用户操作和向用户提供相关功能的主要手段。
好的界面可以让使用者容易掌握、赏心悦目,把操作看作是一种享受而不是负担。
VS2005提供了丰富的控件,大大简化了界面设计过程。
本章主要介绍如何使用这些控件。
由于从这一章以及以后的设计操作既可能在窗体设计界面下完成,也可能在代码编辑窗口中完成,因此有些操作技巧需要提醒读者注意:
1)凡是通过设计界面添加的事件,要想使代码不再与某个事件关联,应该在设计界面下通过属性窗口下的雷电符号完成。
这是因为自动生成的代码是单独保存在另一个文件中的,这样做的目的是为了让其自动修改生成的代码。
如果忘记了在设计模式下操作,而是直接在代码编辑模式下删除了关联的事件及其代码,或者修改了事件名称,由于系统不会自动删除或修改生成的代码中对应事件的事件句柄,因此仍然需要切换到设计模式,并选中要处理的控件,然后单击属性窗口中的雷电符号,在对应的事件中重新处理一遍,否则会引起编译错误。
2)如果希望控制设计窗体中各控件响应
3)如果希望对变量换名,不应该在代码编辑模式下一个个修改,而应该先选中该变量,然后单击鼠标右键,选择【重构】下的【重命名】完成换名操作。
4)对设计窗体中各控件的位置布局时,应该充分利用主菜单下的快捷按钮,这样可以节省很多布局时间,从而大大提高设计效率。
5.1鼠标事件与键盘事件
Windows窗体应用程序的设计是基于事件驱动的。
事件是指由系统事先设定的、能被控件识别和响应的动作,例如,单击鼠标、按下某个键等。
事件驱动指程序不是完全按照代码文件中排列的顺序从上到下依次执行,而是根据用户操作触发相应的事件。
一个控件可以响应多个事件,设计Windows应用程序的很多工作就是为各个控件编写需要的事件代码,但一般来说只需要对必要的事件编写代码。
在程序运行时由控件识别这些事件,然后去执行对应的代码。
没有编写代码的事件是不会响应任何操作的。
在VS2005中,每一个控件都有对应的若干事件,不同的控件所具有的事件也不尽相同。
但是鼠标事件和键盘事件是绝大多数控件都有的两大类事件。
常用的鼠标事件有鼠标单击、双击、鼠标进入控件区域、悬停于控件区域、离开控件区域等。
常用的键盘事件有某个按键的按下、释放等。
表5-1列出了大多数控件都有的常用的鼠标和键盘事件。
表5-1常用事件
事件类型
事件名称
事件触发条件
常用鼠标事件
Click
单击鼠标左键时触发
MouseDoubleClick
双击鼠标左键时触发
MouseEnter
鼠标进入控件可见区域时触发
MouseMove
鼠标在控件区域内移动时触发
MouseLeave
鼠标离开控件可见区域时触发
常用键盘事件
KeyDown
按下某个键时触发
KeyUp
释放按键时触发
KeyPress
释放按键后触发
【例5-1】演示鼠标和键盘事件的触发条件,触发顺序,并显示各个事件所传递的参数内容。
(1)新建一个名为EventExample的Windows应用程序项目,在【解决方案资源管理器】中将Form1.cs重命名为FormEvent.cs,设置窗体的【Text】属性为“事件驱动的界面设计”。
(2)向窗体中添加两个Label控件、一个Button控件和一个TextBox控件,各控件的布局及相关属性如图5-1所示。
(3)选中textBox1控件,按
privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse)
{if(e.KeyCode==Keys.Up)
{
MessageBox.Show("您现在按下的是向上箭头!
");
}
if(e.KeyCode==Keys.F1)
{
MessageBox.Show("您现在按下的是功能键F1!
是否需要帮助?
");
}
if(e.Alt==true&&e.Shift==true&&e.Control==true)
{
MessageBox.Show("您现在按下的是组合键Ctrl+Alt+Shift!
");
}
if(e.Control==true)
{
switch(e.KeyCode)
{
caseKeys.A:
MessageBox.Show("您现在按下的是组合键Ctrl+A!
");
break;
caseKeys.B:
MessageBox.Show("您现在按下的是组合键Ctrl+B!
");
break;
}
}
}
(4)添加buttonOK控件的Click事件、MouseEnter事件、MouseLeave事件代码:
privatevoidbuttonOK_Click(objectsender,EventArgse)
{
label1.Text=textBox1.Text;
}
privatevoidbuttonOK_MouseEnter(objectsender,EventArgse)
{
labelDisplay.Visible=true;
labelDisplay.Text="按下按钮将文本框中的内容显示于下面!
";
}
privatevoidbuttonOK_MouseLeave(objectsender,EventArgse)
{
labelDisplay.Text="";
}
(5)按〈F5〉键编译并执行该应用程序。
程序运行时,创建窗体界面后等待用户操作。
当用户将鼠标置于buttonOK上方时,会自动触发该按钮的MouseEnter事件,并执行buttonOK_MouseEnter的事件代码,labelDisplay上就会显示提示信息“按下按钮将文本框中的内容显示于下面!
”;当鼠标离开buttonOK区域时,会触发该按钮的MouseLeave事件,并执行buttonOK_MouseLeave的事件代码,清除labelDisplay上的文本信息;当用户选中textBox1后,按下“↑”键或“Ctrl+A”组合键或“Ctrl+B”组合键,则触发textBox1的KeyDown事件,并执行textBox1_KeyDown的事件代码,显示相应的提示信息;当用户按下buttonOK时,会触发该按钮的Click事件,并执行buttonOK_Click事件代码,使textBox1中的文本显示在label1上。
5.2Windows窗体基本控件
VS2005提供的控件中,有一些控件是经常使用的,这一节主要介绍这些常用的基本控件及其使用方法和技巧。
5.2.1控件中常用的属性和方法
每个控件都有自己的属性、方法以及响应键盘和鼠标操作的事件。
学习控件的关键是要注意这些属性、方法和事件的灵活应用。
对大部分控件来说,有一些常用的属性和事件都是相同的,为避免介绍的内容重复,这里首先将大部分控件共有的属性抽取出来做一些简单介绍。
1.常用基本属性
属性是指控件的各种性质,例如,控件的大小、在窗体中的位置等等。
属性一般都有默认值,也就是说,在实际编程时即使不设置任何属性值,控件也是可以使用的,只有默认值不能满足要求时才需要更改。
在设计窗体时,一般通过属性窗口来设置控件的属性初始值。
但要注意,有些属性在窗体设计界面中是看不到的,只能在代码中才能使用。
表5-2列出了大多数控件都有的属性名称及含义。
表5-2常用属性
属性
含义
Name
指定控件的名称,它是控件在当前应用程序中的唯一标识,代码通过该属性来访问控件
Enabled
决定控件是否可用,取值为true时可用,取值为false时不可用
Font
设置控件上文本的显示形式,是一个复合属性,包括字体名称、字号以及是否为斜体、加粗和下划线等
BackColor
设置控件的背景色
ForeColor
设置控件的前景色,即控件上文本的颜色
Location
定位控件,这是一个复合属性,需要指定控件的左上角相对于其容器左上角的坐标(x,y)
Size
指定控件的高度和宽度,是一个复合属性
Text
设置控件上所要显示的文本,如标签、按钮、复选框等控件上的文字
Visible
决定控件是否可见,取值为true时可见,取值为false时不可见
2.常用方法
每个控件都有很多方法。
属性指控件具有的性质,方法则指控件要完成的功能。
方法是通过代码来调用的。
例如,Focus方法(获得焦点)、ToString方法(转换为字符串)等。
5.2.2TextBox控件
TextBox控件的主要作用是允许用户在应用程序中输入或编辑文本,当然也可以将控件的只读属性设为true,用作显示文本,而不允许用户编辑文本框中所显示的内容。
在TextBox中编辑的文本可以是单行的,也可以是多行的,还可以设置为密码字符屏蔽状态作为密码输入框。
1.常用的基本属性
1)Text属性:
用于获取或设置文本框中的内容。
2)MaxLength属性:
控制用户可以在文本框控件中键入的字符的最大数目,默认值为最大值,即32767个字符。
注意,由于使用的是Unicode字符,所以对中文和英文的字符计数方法是相同的,即一个英文字符的长度为1,一个汉字字符的长度也是1。
3)Multiline属性:
决定文本框控件是否可以包含多行内容。
当该属性为false时,TextBox的Width属性可以更改,但Height属性是固定的,即只允许输入单行文本;当该属性值为true时,TextBox的Width属性和Height属性均可更改,也可直接由鼠标拉动改变文本框的大小,以支持多行文本的输入和显示。
4)PasswordChar属性:
用于指定作为密码输入文本框,在输入字符时文本框中所要显示代替密码的屏蔽字符。
如果设置了PasswordChar属性,即指定了某一字符作为密码屏蔽字符,则输入的任何字符都显示为该符号。
注意,TextBox控件还有一个UseSystemPasswordChar属性,若该属性设为true,则无论在PasswordChar属性中指定了哪一个字符,最终在TextBox中的文本只能以系统默认的密码字符“*”来显示。
2.常用的基本事件
1)Enter事件:
当前文本框为活动状态时触发的操作。
注意,Enter事件和MouseEnter事件不同,MouseEnter事件是表示当鼠标进入当前文本框区域内时触发操作。
2)TextChanged事件:
文本框中的当前内容(Text属性值)更改时触发的操作。
【例5-2】简单的用户信息录入界面示例。
(1)新建一个名为TextBoxExample的Windows应用程序项目,在【解决方案资源管理器】中将Form1.cs改名为FormTextBox.cs,系统会自动弹出对话框确认是否重命名所有引用项,选择【是】,则窗体的【Name】属性自动更改为“FormTextBox”。
(2)选中Form窗体,设置【Size】属性为Width=500,Height=400,或者可以直接使用鼠标拖动窗体右下角调整到适当大小;设置【Text】属性为“用户信息录入”,作为窗体标题栏显示的文本;将【BackColor】属性选择为【Web】的“LightGray”。
(3)向Form窗体中添加四个Label控件、三个TextBox控件和一个Button控件,窗体中各控件的属性、布局及显示效果如图5-2所示。
(4)选中textBoxUser,从【属性】窗口的事件列表中双击MouseEnter事件,系统自动跳转到FormTextBox.cs的代码页中,并创建相应的代码框架,只需在其中直接添加如下的功能代码即可;或者直接在FormTextBox.cs代码页的FormTextBox类中添加如下代码,并将其事件名“textBoxUser_MouseEnter”添加到textBoxUser控件事件列表中MouseEnter事件后的空白处。
privatevoidtextBoxUser_MouseEnter(objectsender,EventArgse)
{
textBoxUser.Text="";
}
(5)用同样的方法添加textBoxPassword和textBoxInformation的TextChanged事件代码。
privatevoidtextBoxPassword_TextChanged(objectsender,EventArgse)
{
textBoxUser.ReadOnly=true;
}
privatevoidtextBoxInformation_TextChanged(objectsender,EventArgse)
{
buttonOK.ForeColor=System.Drawing.Color.Red;
buttonOK.Size=newSystem.Drawing.Size(100,50);
}
(6)添加buttonOK的Click事件代码,用于显示用户输入的信息。
privatevoidbuttonOK_Click(objectsender,EventArgse)
{
labelResult.Visible=true;
labelResult.Text=string.Format("用户名是:
{0};密码是:
{1}\n输入的资料是:
\n{2}",
textBoxUser.Text,textBoxPassword.Text,textBoxInformation.Text);
}
(7)按〈F5〉键编译并执行,尝试不同的操作,理解各控件的属性和事件。
当然,例5-2仅是一个简单的演示程序,并不严密,比如,当用户输入时没有按照“用户名-密码”的顺序输入,则会导致用户名的不可输入等。
存在的这些问题都可以通过添加简单的控制语句来解决,请读者自行完成。
5.2.3MaskedTextBox控件
MaskedTextBox控件,也叫掩码文本框。
它的主要作用是控制输入文本的格式。
如果输入的内容不满足规定的格式,则控件不会接收该输入。
1.常用的基本属性
1)InsertKeyMode属性:
指示向掩码文本框输入字符时的键入模式,其属性值有:
Default、Insert、Overwrite三种。
当属性值为Default时,表示键入模式由当时键盘的插入/改写状态决定,如果输入时键盘处于改写模式,则会改写键入处的字符,否则为插入字符。
当属性值为Insert时,即使键盘的Ins键被按下,也不会以改写方式输入字符。
当属性值为Overwrite时,则任何时候都是以改写方式输入字符。
2)PromptChar属性:
指定作为占位符的字符,用于指示用户需要输入的字符长度,默认的占位符为下划线“_”,需要修改时可以直接在属性后的空白处输入指定字符。
3)Mask属性:
设置当前掩码文本框输入字符的格式。
单击Mask属性后的【…】按钮,弹出如图5-3的窗口,其中是一些设置好的时间、电话号码的格式,若这些格式都不能满足设计者要求,也可以选择自定义格式,或者在Mask属性后的空白处直接输入自定义格式。
自定义输入格式时,可以使用掩码和分隔符两类符号。
掩码用于限制用户可输入的符号类型,程序运行时掩码以占位符显示;而分隔符可作为输入字符之间的关联符,分隔符显示在掩码文本框中,且不可修改。
表5-3列出了常用掩码和分隔符的含义。
表5-3常用的掩码和分隔符
符号
含义
掩码
0
数字“0”~“9”
9
数字“0”~“9”、空格(space)
#
数字“0”~“9”、空格(space)、“+”、“-”
L
字母“a”~“z”、“A”~“Z”
&
键盘可输入字符
A、a
字母与数字
<
强制将其后输入的字母转换为小写
>
强制将其后输入的字母转换为大写
分隔符
.
小数分隔符,即小数点
-
连接分隔符
数字分隔符
:
时间分隔符
/
日期分隔符
$
货币符号
4)AllowPromptAsInput属性:
指定是否允许将占位符看作有效的输入字符,true为允许,false为不允许。
默认值为true。
5)ResetOnPrompt属性:
决定当输入字符与占位符相同时,是否跳过当前输入字符的位置。
若设置为true,则跳过输入的字符,光标直接到下一字符位置;若设置为false,则检查该字符是否为允许接收的字符,若不符合格式要求,则不接收。
默认值为true。
注意,该属性与AllowPromptAsInput属性的含义是不同的,而且ResetOnPrompt属性优先于AllowPromptAsInput属性。
当ResetOnPrompt属性设置为true时,不论AllowPromptAsInput属性如何设置,输入占位符时,都会使光标自动到下一位置,不会检查该字符是否为有效字符;当ResetOnPrompt属性设置为false,AllowPromptAsInput属性设置为true时,会将占位符作为普通的字符处理;当ResetOnPrompt属性设置为false,AllowPromptAsInput属性也设置为false时,会拒绝接收占位符。
6)TextMaskFormat属性:
表示由掩码文本框的Text属性得到的字符串中是否包含占位符、分隔符的内容。
该属性共有4个选项:
ExcludePromptAndLiterals表示占位符和分隔符均不包含;IncludePrompt表示仅包含占位符;IncludeLiterals表示仅包含分隔符;IncludePromptAndLiterals表示占位符和分隔符均包含。
7)HidePromptOnLeave属性:
指示若当前控件未处于活动状态时,是否显示占位符。
若属性值为true时,表示当控件不是活动状态,隐藏占位符;若属性值为false时,即使控件不是活动状态,仍然显示占位符。
2.常用的基本事件
MaskInputRejected事件:
当输入字符不符合掩码要求时触发的操作。
【例5-3】简单的用户信息录入界面示例。
(1)新建一个名为MaskedTextBoxExample的Windows应用程序项目,在【解决方案资源管理器】中将Form1.cs重命名为FormMaskedTextBox.cs。
(2)调整窗体到适当大小;设置【Text】属性为“员工信息管理示例”,作为窗体标题栏显示的文本。
(3)向Form窗体中添加5个MaskedTextBox控件、一个Button控件和若干Label控件,窗体中各控件的属性、布局及显示效果如图5-4所示。
(4)在FormMaskedTextBox类中直接编写MyMaskInputRejected事件和MyMaskInputReset事件。
//若输入不符合要求,则以红色字体显示输入信息
privatevoidMyMaskInputRejected(objectsender,MaskInputRejectedEventArgse)
{
((MaskedTextBox)sender).ForeColor=Color.Red;
}
//重新输入时,以改写方式输入,并恢复正常的字体颜色
privatevoidMyMaskInputReset(objectsender,KeyEventArgse)
{
((MaskedTextBox)sender).InsertKeyMode=InsertKeyMode.Overwrite;
((MaskedTextBox)sender).ForeColor=Color.FromName("WindowText");
}
(5)在构造函数中添加触发事件需要的代码。
publicFormMaskedTextBox()
{
InitializeComponent();
maskedTextBoxBirthday.ValidatingType=typeof(System.DateTime);
//指定maskedTextBoxPhone的MaskInputRejected事件
maskedTextBoxPhone.MaskInputRejected+=
newMaskInputRejectedEventHandler(MyMaskInputRejected);
maskedTextBoxPhone.KeyDown+=newKeyEventHandler(MyMaskInputReset);
maskedTextBoxSalary.MaskInputRejected+=
newMaskInputRejectedEventHandler(MyMaskInputRejected);
maskedTextBoxSalary.KeyDown+=newKeyEventHandler(MyMaskInputReset);
}
(6)添加maskedTextBoxBirthday的TypeValidationCompleted事件代码。
//输入数据格式验证,若不符合要求,则给出提示,并以改写方式是用户重新输入
privatevoidmaskedTextBoxBirthday_TypeValidationCompleted(
objectsender,TypeValidationEventArgse)
{
if(!
e.IsValidInput)
{
MessageBox.Show("您输入的日期不正确!
");
((MaskedTextBox)sender).Focus();
((MaskedTextBox)sender).InsertKeyMode=InsertKeyMode.Overwrite;
}
}
(7)双击buttonOK按钮,添加Click事件代码。
privatevoidbuttonOK_Click(objectsender,EventArgse)
{
//用户名和真实姓名不允许空,进行处理时首先验证二者
if(maskedTextBoxUserCode.Text=="-"||maskedTextBoxUserName.Text=="")
{
MessageBox.Show("您还没有填写用户名或真实姓名!
");
maskedTextBoxUserCode.Focus();
return;
}
//若输入满足要求,则显示输入的信息
labelResult.Visible=true;
labelResult.Text=string.Format("新添加雇员信息如下:
\n"+
"员
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第05章 Windows窗体界面设计 05 Windows 窗体 界面设计
![提示](https://static.bdocx.com/images/bang_tan.gif)