10.1 Windows窗体编程基础
10.1.1 WinForms概述
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
SuspendLayout();
//
// Form1
//
AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(333, 266);
Name = "Form1";
Text = "Form1";
ResumeLayout(false);
}
#endregion
10.1.2 编写GUI应用程序的步骤
- (1)建立“Windows应用程序”项目
- (2) 创建窗体
- (3)为窗体添加控件
- (4)设计控件在窗体中的布局
- (5)设置各控件属性
- (6)编写代码,响应控件事件
GUI(Graphics User Interface),即图形用户界面,是指用图形的方式实现人与计算机之间的交互。
10.1.3 窗体
窗体的属性:决定了窗体的外观。
(1)Text:用来指定窗体的标题内容。
(2)Size和StartPosition:用来指定窗体显示的大小和位置。
(3)ForeColor:用来更改窗体内所有控件默认前景色。
(4)FormBorderStyle:用来指定窗体的边框类型。
(5)MinimizeBox和MaximinzeBox:指定窗体最小化、最大化按钮是否可用。
(6)WindowState:用来指定窗体运行时的状态。
(7)Opacity:用来指定窗体的不透明度级别(0%~100%)。
(8)Icon:用来指定窗体的图标。
(9)AcceptButton:窗体的“接受”按钮。如果设置了此按钮,则用户每次按enter键时,都相当于单击了该按钮。
(10)CancelButton:窗体的“取消”按钮。如果设置了该属性,则用户每次按ESC键时,都相当于单击了该按钮。
(11)ControlBox:确定窗体是否有“控件/系统”菜单栏。
(12)BackgroundImage:用于确定窗体的背景图像。
(13)BackgroundImageLayout:用于确定窗体的背景图像布局。
窗体的常用方法:
(1)Close():关闭窗体。
(2)Hide():隐藏窗体。
(3)Show()和ShowDialog():显示窗体。
模式对话框和非模式对话框
对话框可以分为模式对话框和非模式对话框两种。
模式对话框是指用户只能在当前的对话框窗体进行操作,在该窗体关闭之前不能切换到程序的其他窗体,通过窗体的ShowDialog()方法显示。
非模式对话框是指当前所操作的对话框窗体可以与程序的其他窗体切换,通过窗体的Show()方法显示。
窗体的常用事件:
10.2 Control类
.NET中的大多数控件都派生于System.Windows.Forms.Control类。Control类实现了所有窗体交互控件的基本功能:处理用户键盘输入、处理消息驱动、限制控件大小等等。
Control类的属性
10.2.1 控件的基本属性
例10-1:图片的显示和隐藏
问题描述:在窗体上放置一个图片框、一个“显示”按钮和一个“隐藏”按钮。开始运行时,图片不可见,“显示“按钮可用,“隐藏”按钮不可用。单击“显示”按钮后,图片显示出来,“显示”按钮变成不可用,而“隐藏”按钮变成可用。
10.2.2 事件和事件处理
事件处理程序是绑定到事件的方法。当引发事件时,执行事件处理程序内的代码。每个事件处理程序提供了两个用于处理事件的参数。如下为Button 控件的 Click 事件的事件处理程序:
private void button1_Clicked(object sender, System.EventArgs e)
{
}
第一个参数 sender 提供对引发事件的对象的引用。第二个参数e传递针对要处理的事件的对象。通过引用对象的属性(有时引用其方法)可获得一些信息,如鼠标事件中鼠标的位置或拖放事件中传输的数据。
键盘事件:
当用户对键盘进行操作时,系统会产生相应的键盘事件。当用户按下某个键时,就会发生KeyDown事件,随后便发生KeyPress事件。而当用户释放某个键时,发生KeyUp事件。
鼠标事件:
鼠标是一种定位输入设备,通常有两个或三个按钮(左、中和右按钮),还可能有滚轮。它的基本操作方式主要有:单击、双击和滚动。
Control类的事件
Control类的方法
例9-2:图片显示控制
问题描述:窗体上用图片框显示一张图片。当在图片框上单击鼠标左键时图片放大10%,单击鼠标右键时图片缩小10%。鼠标在图片框上移动时,窗体标题显示当前位置坐标。
10.3 常用控件
10.3.1 标签
标签(Label):用于显示用户不能编辑的文本或图象,起标注或说明作用。该控件不能获得焦点。
标签常用的属性、方法与事件
例:标签的显示与隐藏。
1、新建应用程序。
2、在界面上添加一个标签和两个按钮。
3、设置标签控件的text属性为“欢迎来到编程世界!”,btnHide的text属性修改为“隐藏”,btnShow的text属性修改为“显示”,enabled属性设置为false。
4、
10.3.2 按钮
按钮(Button):提供用户与应用程序的交互,单击按钮来执行相应的操作。
按钮的属性、事件与方法
Click事件练习。
private void button1_Click(object sender,
System.EventArgs e)
{
MessageBox.Show("你点击了[确定]按钮。",
"提示信息",MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
MouseEnter事件练习。
private void button1_MouseEnter(object sender,System.EventArgs e)
{
//颜色在System.Drawing名称空间下
button1.BackColor=Color.Red;
}
MouseLeave事件练习。
private void button1_MouseLeave(object sender,System.EventArgs e)
{
button1.BackColor=SystemColors.Control;
}
10.3.3 文本框
文本框(TextBox):主要作用是允许用户在应用程序中输入或编辑文本,也可以设定其成为只读控件。在TextBox中编辑的文本可以是单行的,也可以是多行的,还可以设置为密码字符屏蔽状态作为密码输入框。
文本框的属性、事件与方法
Text属性是文本框最重要的属性,要显示的文本就包含在Text属性中。Text属性可以在设计窗口时使用属性窗口设置,也可以在运行时用代码设置或者通过用户输入设置,同样也可以在运行时通过读取Text属性来获得文本框的当前内容。
例10.3:乘法运算
说明:设计一个乘法运算窗口,如下图所示,该窗口能完成浮点数乘法运算。
private void button1_Click(object sender, EventArgs e)//求积
{
double a=0, b=0, s=0;
try
{
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
s = a * b;
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
textBox3.Text = Convert.ToString(s);
}
private void button2_Click(object sender, EventArgs e)//清空
{
textBox1.Clear(); //textBox1.Text=“”;
textBox2.Clear();
textBox3.Clear();
textBox1.Focus();
}
private void button3_Click(object sender, EventArgs e)//退出
{
Close();
}
例10.4:登录窗体设计
说明:设计一个登录窗口。登录窗口是很多应用系统中不可缺少的组成部分。通过验证用户输入的用户名和密码,决定是否允许用户进入系统,可在一定程度上保证系统的安全。
private void button1_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "abc") && (textBox2.Text == "123"))
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("输入错误!");
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Clear();//或者textBox1.SelectAll();
textBox2.Clear();
textBox1.Focus();
}
10.3.4 单选按钮控件
单选按钮(RadioButton):单选按钮通常成组出现,用于为用户提供两个或多个互相排斥的选项。
单选按钮是以他们所在的容器划分组的,直接放置在Form上的单选按钮将自动成为一组,这时Form就是容器,当选中容器中的一个单选按钮时,其他的将自动撤销选中。
如果要在一个Form上创建多个单选按钮组,则需要使用Panel控件或者GroupBox控件作为容器。
Panel(面板)控件相当于一个容器,可以用来容纳其他控件。使用一个Panel容纳几个RadioButton,如果移动Panel控件,则控件內的其他控件也跟着移动。
GroupBox控件(分组框),是一个常用的容器控件。
单选按钮的属性、事件
例9.5: RadioButton控件的实例练习
private void radioButton1_CheckedChanged(object sender,System.EventArgs e)
{
if(radioButton1.Checked)
{
textBox1.Text=radioButton1.Text;
}
}
其余两个RadioButton控件的CheckedChanged触发事件均和其相似。 运行,观察结果。
10.3.5 复选按钮控件
复选按钮( CheckBox ):复选框指示某特定条件是打开的还是关闭的。
当用户希望选择一个或多个选项时,就需要使用复选框。多个CheckBox控件构成一组选项时,可以进行多重选择,相互之间不影响。
复选按钮的属性、事件
例9.6:简单的学生信息调查的设计与实现
一个关于RadioButton控件以及CheckBox控件的使用的简单例子。程序界面如下:
private void button1_Click(object sender, EventArgs e)
{
string name;
string sex;
string course=null;
name = textBox1.Text;
if (radioButton1.Checked)
sex = radioButton1.Text;
else
sex = radioButton2.Text;
if (checkBox1.Checked)
course += checkBox1.Text + " ";
if (checkBox2.Checked)
course += checkBox2.Text + " ";
if (checkBox3.Checked)
course += checkBox3.Text + " ";
if (checkBox4.Checked)
course += checkBox4.Text + " “;
textBox2.Show();
textBox2.Text = "姓名:" + name + "\r\n\r\n" +
"性别:" + sex + "\r\n\r\n" +
"所学过的课程:" + course;
}
例10.7:字体设置案例
说明:本案例建立一个使用单选钮和复选钮的应用程序,界面上有一个文本框&#x