1、窗体应用程序的步骤窗体Windows控件的使用菜单对话框多文档界面打印与打印预览C#Windows项目的设计应遵循3个基本步骤:拖放对象就可以生成用户界面;设置每个对象的属性,如果需要,修改它的外观和行为;如果需要,对每个对象添加C#程序代码。当运用C#语言开发Windows应用程序时,Visual Studio提供了有效创建、调试和测试应用程序所需的所有设计工具,并且开发出的程序能充分利用Windows的功能。在此环境中,C#包括以下功能或对实现的支持:一个定义用户界面(包括窗体和控件)颜色的调色板;一个用于创建包含加速键、键盘访问键以及层次菜单栏的菜单编辑器;一个属性窗格,它便于你编译 每
2、个对象(窗体或控件)的初始属性,而不必编写任何代码;快速双击任何对象,Visual Studio将自动为它添加事件处理器;提供了完整的工具箱,通过点击、拖放就可以创建用户界面;访问完整的C/C+数学库;用于金融计算的货币数据类型;在线调试和解释正在编写的每条语句;预定义创建按钮、复选框、标签、文本框、组合框以及其它控件的命令对象;另外,还可以轻松的添加水平和垂直滚动条和菜单;自定义控件(OCX)的开发;使用如颜色、字体和打印等公共 对话框的能力。5.2 窗体采用Windows应用程序的末班打开编译系统,系统将自动为用户生成一个空白的窗体。该窗体就是应用程序运行时显示给最终用户的操作界面。设计界
3、面所需要的各种组件都组织在工具箱中。窗体(Form,又叫表单)是用户界面最为基本的元素,它实际上代表了应用程序的一个窗口,为其它的组件提供了一个“容器”。用户对应用程序的操作一般来说都是通过某一个窗口来实现的。1、Name属性Name属性用来在程序中唯一的标识表单。事实上,任何一个组件都有一个Name属性。Name属性的取值应该遵循C#中变量命名的原则。由于表单同时还充当了其他组件的容器的作用,因此要表示某一个表单中的某一个组件,必须以如下格式:表单名.组件名2、Text属性Text属性用于指定在表单的标题栏中显示的文本信息。Text属性和Name属性不同,前者一般用于提示用户,而或者则主要在
4、程序中表示表单。对于最终用户来说,Text属性是可见的,而Name属性则是不可见的。除了可以通过属性编辑器对Text属性进行预先设定外,还可以通过程序代码在程序运行时对Text属性进行动态的修改。3、外观属性表单可以拥有各种各样的外观。控制这些外观的属性包括Font属性、ForeColor属性(设置前景色)、BackColor属性(设置背景色)、BorderStyle属性(设置边界形状)以及BackgroundImage属性(设置背景图片)等。Font属性用于设置在表单上所使用的文字的字体。该属性不仅会影响到表单本身的文字,而且还会对其中组件的文字的字体产生影响。BorderStyle属性用于
5、控制表单的边界属性,它可以是下列值之一:Fixed3D 固定的三维边界FixedDialog 固定的对话框风格的边界FixedSingle固定的单线条的边界FixedToolWindow不可以改变大小的工具窗口None没有边界Sizable可以改变大小的边界SizableToolWindow可以改变大小的工具窗口4、大小属性表单的大小是以像素来表示的,由Size属性控制。在Size属性下面又可以分成Height和Width两个子属性,分别用于指定表单的高度和宽度。5、位置属性通过Location属性可以设置表单在屏幕上显示的位置。Location属性也包括X和Y两个子属性,其中X属性用于设置表
6、单左上角的水平坐标,Y属性用于设置表单左上角的垂直坐标。6、FormState属性一个表单一般都会有最大化、正常和最小化三种状态。通过对表单的FormState属性的设置可以改变窗口的状态,该属性的取值有如下三种:Normal正常窗口Minimized最小化窗口Maximized最大化窗口7、Enable属性Enable属性用于控制当前表单的活动状态,如果设置该属性为false,则表单以及表单内部的组件都将处于失活状态。8、Icon属性表单在正常显示的时候,一般都会在窗口的标题栏的左侧显示一个图标,同时对表单最小化后也会在Windows的工具栏中显示一个图标代表这个表单。表单的Icon属性就是
7、用来指定这个图标的,设置该属性时,只需要指定相应的Icon图标的文件名即可。图标文件一般都以ico作为后缀。9、TopMost属性用过RealPlayer软件的用户都知道可以选择某一个菜单命令使得播映的画面总是显示在所有的窗口的最上层。在C#中要实现这一点,只需要设置表单的TopMost属性即可让该表单在运行时将总是显示在最上层。表单的主要事件定义了表单可以响应的用户的所有的操作以及系统需要表单进行响应的所有操作。事件的处理程序也是实现应用程序的主要功能的地方。1、Activate事件和Deactivate事件该事件在表单被激活时触发。用户在不同表单之间切换或在程序代码中调用表单的Activa
8、te方法时都会触发Activate事件。和Activate事件对应的Deactivate事件在窗口由激活状态转变成失活状态时被触发。2、Close事件和Closing事件Close事件在窗口被关闭的时候被触发。用户单击表单的关闭框或者通过代码调用表单的Close方法都可以触发Close事件。一般可以在Close事件中进行对表单资源的回收工作。Closing事件和Close事件类似,它在表单正在被关闭的时候触发。该事件的处理程序中包含了一个CancelEventArgs类的对象ar作为参数,该对象有一个名为Cancel的属性,如果在Closing事件中设置ar参数的Cancel属性为true,则
9、可以结束对表单的关闭操作,使得表单仍然处于打开状态。3、Clicked事件和DoubleClicked事件Clicked事件在表单被单击的时候触发,DoubleClicked事件在表单被双击时的时候被触发。4、KeyPress事件、KeyDown事件和KeyUp事件KeyPress事件、KeyDown事件和KeyUp事件是三个比较常用的键盘事件,其中KeyPress事件在用户按着键盘上的某一个键的时候被触发,KeyDown事件在键盘上的某一个键由自由状态变成按下状态这一过程中被触发,KeyUp事件在键盘上的某一个键由按下状态变成自由状态这一过程中被触发。5.3 Windows控件使用对于C#来
10、说,标准控件是一个可以放置在窗体中的图形对象。按钮和文本框就属于标准控件。每个控件都有自己的一套识别属性和事件。所有C#界面都是综合应用这些控件及其相关事件设计而成。常用控件及其描述:Button(按钮)按钮控件对应的图标上有“ab”字样。用户激活按钮控件时,它执行一个指令序列。当用户选中按钮控件时,它们呈现出下沉图形。按钮控件通常由相关联的command_Click()事件激活。按钮控件独有的两个属性是Default和Cancel。它们用于创建常见的OK和Cancel按钮,这两个按钮分别响应ENTER和ESC键。MonthCalendar(日历)日历控件图标是一个小的日历。日历控件初始显示当
11、前月的一个小日历。此日历可以向前或向后滚动到其他月份。点击日历中的某个日期可以选中特定的日期。然后,程序读取这个日期。CheckBox(复选框)复选框控件为用户提供了“是/否”、“包含/排除”选项。当选中某一项时,复选框控件将显示一个复选符号()。未选中项不带此符号。可以同时选多个选项ComboBox(组合框)组合框控件结合了文本框和列表框控件的功能。通过组合框控件的Style属性可以选择以下三种样式之一:下拉式组合框(Style=0)、简单列表显示式(Style=1)以及下拉列表框式(Style=2)OpenFileDialog、SaveFileDialog、FontDialog、Color
12、Dialog、PrintDialog、PrintPreviewDialog(公共对话框)这些公共对话框控件用于为C#应用程序提供一个预定义对话框。预定义这些常用对话框的目的是确保所有Windows应用程序在外观、感觉和功能上的一致。另外,因为它们是预定义的,所以可以节省大量的设计时间。DateTimePicker(日期/时间)日期时间选择控件的图标是一个放在日历上的小文本框。日期时间选择控件用于显示当前日期,或者另一个可滚动的日期,而且允许用户使用这个日期和程序数据GroupBox(分组框)分组框控件的图标是一个小的矩形,在它的上面标有两个字母。分组框控件用于分组窗体上的其它控件。这些被分组的
13、控件在用途上相关联Label(标签)标签控件的图标是一个标有“A”的图标。标签控件用于显示文本标签。标签控件常用于为那些没有自己标题属性的控件提供标签。不过,标签控件可以通过程序代码修改ListBox(列表框)列表框控件显示一个选项列表,用户可以从中进行选择。列表框控件被定义为一个字符串数组。你可以使用ListIndex(列表索引)访问这个列表数组。ListCount属性返回这个数组中的行数。列表框控件与所有文件系统控件具有相似的属性MainMenu(菜单)主菜单控件的图标上包含一些菜单项。主菜单控件用于给窗体添加菜单栏。通过这个菜单栏可以输入菜单和菜单项PictureBox(图片框)图片框控
14、件的图标是一副小示意图片。图片框控件用于给窗体添加图片和位图资源Point(指针)此“指针”与鼠标指针相似,它用于选择、移动,或调整工具箱中控件的大小ProgressBar(进度条)进度条控件的图标为一个小矩形,上面还有许多表示进度的小矩形。进度条控件用于向用户指示一些耗时操作的进度。这些操作可能是定时器事件、文件上传和下载等等RadioButton(单选按钮)单选按钮控件的图标是一个标有“.”的小圆形。单选按钮控件用于让用户从一组选项中选中某一项HScrollBar、VScrollBar(滚动条)水平和垂直滚动条为用户提供一个翻阅列表或选择数据范围的图形化工具TextBox(文本框)文本框控
15、件用于显示应用程序产生的文本或从用户接收的输入。将控件的MultiLine属性打开后,文本框控件具有多行显示功能。在多行模式下,文本框控件可以实现自动换行。文本框控件的最重要属性是Text属性,它以字符串形式返回文本框的内容Timer(定时器)定时器控件用于按某时间间隔激活特定事件。使用Interval属性(以毫秒为单位指定),定时器控件可用于创建闹钟,在后台运行过程,或与其它时间相关事件协作在窗体中放置的每个对象都有一套相关的特性,称做属性(property)。最常用的属性集定义了对象的大小、屏幕位置以及颜色。每次在窗体上放置对象时,Visual Studio将给它赋予适当的属性并初始化为一
16、套预定义值。属性窗格包含一个与所选择对象对应的属性列表,你可以更改它们的值。窗体和控件不仅有一套预定义的属性,而且还有一套它们要响应的事件。无论何时,只要你需要某个对象响应某一事件作出反应,可以将指令放在一个事件处理器中。事件处理器只是添加到项目中的方法而已。在属性窗格中点击“闪电”图标可以查看某个控件的不同事件。这样可以看到这个控件的所有事件列表。5.3.2 Label控件和LinkLabel控件标签(Label)主要应用于那些需要进行文字提示的场合。需要通过Label组件显示的文字保存在Label组件的Text属性中。为了设置Label组件中的文字的排列方式,Label组件还定义了一个Te
17、xtAlign属性,该属性一共有如下三种取值:Center Label组件中的文字居中对齐Left Label组件中的文字左对齐Right Label组件中的文字右对齐为了美化Label组件的显示效果,还可以给该组件指定一个图片作为背景。可以作为Label组件背景的图片类型包括jpg、bmp、gif和ico等。C#提供了两个途径来实现给Label组件指定背景的功能。通过Image属性直接指定一个图片作为Label组件的背景。先指定一个图像列表给Label组件ImageList属性,然后再设定Label组件的ImageIndex属性来指定图像列表中的某一图片作为Label组件的背景。在指定了图片
18、后,还应该指定该图片在Label组件中的布局方式,这可以通过Label组件的ImageAlign属性来实现。如果设置Label组件的AutoSize属性为true,则Label组件还可以根据其中显示的内容自动调解其大小。当然,也可以预先确定Label组件的高度和宽度,其中Label组件的高度可以通过PreferredHeight属性来设置,Label组件的宽度可以通过PreferredWidth属性来设置。除了普通的Label组件可以实现标签的功能外,C#还针对网络应用提供了一种特殊的组件LinkLabel,该组件实现和Label组件类似的功能,但是它又结合了大量的网络特征,其主要的应用是表示
19、一个超文本链接。图5-1中同时包含了Label组件和LinkLabel组件,从图中可以非常明显的看到两种组件之间的差异,LinkLabel用蓝色显示文本内容,同时还在文本内容下面加上了下划线,这些和通常在网络中使用的超级链接的格式是一致的,Label组件则没有这些特点。LinkLabel组件的链接特征还可以通过该组件的LinkBehavior属性进行设置。LinkBehavior属性的值可以是:AlwaysUnderline 总是在LinkLabel组件的文本内容下面加上下划线。HoverUnderline 根据情况决定是否在LinkLabel组件的文本内容下面加上下划线。NeverUnder
20、line 不在LinkLabel组件的文本内容下面加上下划线。SystemDefault 采用系统的默认设置。在程序运行时,如果移动鼠标到LinkLabel组件上,则鼠标将由正常的“箭头”形状变成一只“小手”形状,表示这是一个超级链接。尽管移动鼠标到LinkLabel组件上方的时候就可以使鼠标的形状改变,从而提示鼠标所在区域存在一个超级链接。但是事实上并不是移动鼠标到LinkLabel组件的任何一部分上,鼠标都会改变形状,鼠标必须移动到包含有LinkLabel的LinkArea属性制定的点的区域上方时,鼠标的形状才会改变。同时针对用户的操作,LinkLabel组件还可以改变它的颜色。如果设置L
21、inkLabel组件的ActiveLinkColor属性为红色,则对于那些处于激活状态的超级链接就用红色显示,如果设置VisitedLinkColor的属性为灰色,则对于那些已经访问过的连接就采用灰色进行显示。LinkLabel组件还定义了一个LinkClicked事件,该事件专门用来处理用户单击超级链接需要进行的工作。5.3.3 Button控件在Windows操作系统中,按钮(Button)得到了非常普遍的应用。通过Button组件的FlatStyle属性可以设置它的平面显示的风格,该属性可以是如下值之一:Flat 按钮总是以平面方式显示。Popup 鼠标移动到按钮上方时,按钮以三维方式显
22、示,其他情况下同Flat。Standard 按钮总是以三维方式显示。Button组件的DialogResult属性可以用来设置包含该按钮的表单的返回值。一旦设定了按钮的DialogResult属性的值,如果用户单击该按钮返回主表单,则主表单就可以获得按钮在DialogResult属性中设定的值。Button组件中使用的最为普遍的事件是Click事件,该事件在用户单击该按钮时被触发。5.3.4 TextBox控件文本框(TextBox)是专门用来供用户输入信息的,一般来说,用户通过TextBox输入的信息都比较简单,如果要输入大量的信息,则可以使用Memo组件。用户通过文本框输入的信息保存在Te
23、xt属性中。文本框的Text属性也可以在界面设计的时候指定一个初始值,这样程序运行时,该初始值将自动显示在该文本框中,程序中可以通过读取该属性的值来获得用户的输入信息。当然,程序也可以通过代码设定Text属性的值,例如,下面的程序调用TextBox组件的构造函数生成一个文本框,然后将新生成的文本框的Text属性初始化为“Hello World!”。public void CreateTextBoxControl()TextBox Text1=new TextBox();/创建文本框 Text1.Text=”Hello World!”;/设定Text属性的值我们都知道在输入密码时用户不希望他所输
24、入的信息原封不动的显示在屏幕上。TextBox组件提供了一个PasswordChar来实现这一功能。用户输入的内容都会被在PasswordChar属性中指定的字符所代替。如果不给PasswordChar属性指定任何值,则运行时,用户所有的输入信息都将原样显示出来。虽然在很多时候文本框都用于输入比较简短的信息,这些信息通常只占用一行。但是并不表示文本框不能实现多行输入和显示。事实上,只要设定文本框的MultiLine属性为true,则文本框就可以实现多行输入和显示。在涉及到多行输入和显示时,有一个问题必须解决,那就是换行。为了实现对输入信息的某一行的访问,文本框还定义了一个Lines属性,该属性
25、实际上是一个字符串数组,其中的每一个元素对用着用户输入的一行,如果在界面设计时就想预先输入多行文本到文本框,就可以通过单击Lines属性右侧的按钮来启动图5-3中的对话框,然后在该对话框中输入多行文本。对于那些不能同时显示在文本框中的内容,用户还可以通过移动滚动条来查看。在默认情况下,文本框是不包含滚动条的,如果要给文本框加上滚动条,则必须设置文本框的ScrollBar属性,该属性可以是以下值之一:None 没有滚动条Vertical只包含垂直滚动条Horizontal 只包含水平滚动条Both既包含垂直滚动条又包含水平滚动条文本框还有一个比较特殊的属性-HideSelection。一般情况下
26、,用户可以通过同时按下Shift键和移动鼠标来选中文本框中的某一个部分,选中内容将被一条蓝色高亮显示的光带所罩住,但是在移开鼠标以后,这条光带将自动消失,如果希望在移走鼠标后,仍然希望先前选中的内容被蓝色高亮显示,这时可以设置文本框的HideSelection属性为true。TextBox组件的MaxLength属性用于指定文本框中最多可以输入的字符数,CharacterCasing属性用于设置在文本框中输入的字符的大小写,TextAlign属性用于设置输入文本在文本框中的排列方式。参考下面的例子:public void CreatePasswordTextBox()TextBox TextB
27、ox1=new TextBox();/新建文本框 TextBox1.MaxLengt=8;/设置最大长度为8 TextBox1.PasswordChar=*;/设置隐藏密码的字符 TextBox1.CharacterCasing=CharacterCasing.Upper;/所有输入字符都是小写字母 TextBox1.TextAlign=HorizontalAlignment.Center;/居中排列例5-1 创建一个项目,添加三个文本框和一个按钮,实现的功能是:在密码框中输入若干字符(多于10个),单击按钮,密码框中的内容被显示到单行框中,同时分行显示到多行框中,每行5个字符详细代码如下:n
28、amespace TextBox1public partial class Form1:Form public Form1()InitializeComponent();private void button1_Click(object sender,EventArgs e)if(this.textBox1.Text.Length=10)MessageBox.Show(请在第一个框内输入多于请在第一个框内输入多于10个字符个字符);else this.textBox2.Text=this.textBox1.Text;int n=this.textBox2.Text.Trim().Length/
29、5;if(this.textBox2.Text.Trim().Length%5!=0)n+;String lines=new Stringn;for(int i=0;i n-1;i+)linesi=this.textBox2.Text.Substring(5*i,5);linesn-1=this.textBox2.Text.Substring(5*(n-1);this.textBox3.Lines=lines;格式文本框RichTextBox,RichTextBox在TextBox的基础上支持字体、颜色、缩进等排版元素。例5-2 创建一个窗体,在该窗体中添加一个RichTextBox、一个文本
30、框和3个按钮。实现的功能是:在RichTextBox中输入文字,并选中部分文字,单击“红色”按钮,选中的文字将变成红色。单击“撤销”按钮,RichTextBox中的编辑被撤销一次,单击“显示到下面”按钮,下方的TextBox的内容将是上方RichTextBox控件中的内容,但是没有格式。代码如下:namespace RichTextBox1 public partial class Form1:Form public Form1()InitializeComponent();private void button3_Click(object sender,EventArgs e)this.te
31、xtBox1.Text=this.richTextBox1.Text;private void button1_Click(object sender,EventArgs e)this.richTextBox1.SelectionColor=System.Drawing.Color.Red;private void button2_Click(object sender,EventArgs e)this.richTextBox1.Undo();知识点:TextBox.Text:控件属性,获取和设置文本框中的文字字符串。String.Length:属性,返回字符串的长度。String.Trim(
32、):去掉字符串前面和后面的空白字符。LinkLabel.Text:控件属性,获取和设置链接标签的文字字符串。LinkLabel.Links:获取和设置链接标签的超级链接地址。其LinkData属性存储链接地址。LinkLabelLinkClickedEventArgs.Link:触发单击链接标签事件的参数,返回单击的链接地址。RichTextBox.Text:控件属性,获取和设置格式文本框中的文字字符串。RichTextBox.Undo():撤销最近一次RichTextBox中的编辑操作。5.3.5 RadioButton控件 5.3.6 CheckBox控件单选按钮(RadioButton)
33、和复选框(CheckBox)都是提供一些选项供用户进行选择。二者的主要区别主要在于界面风格的不同。复选框没有分组的概念,在同一个表单中,不同的复选框是相互独立的。这样,在同一个表单中可以同时选中多个复选框。单选按钮则不同,一般来说,某一个单选按钮总是放在某一个单选按钮组中,在任何一个时刻,每一个单选按钮组中只能有一个单选按钮处于选中状态。同一个表单中可以同时有几个相互独立的单选按钮组。1、复选框复选框一般可以有选中或者未选中两种状态,复选框的状态保存在复选框组件的Checked属性中。如果用户单击复选框,则复选框将自动在选中和未选中两种状态之间切换。不过,如果设置复选框的AutoChecked
34、属性为false将禁止复选框的状态切换。例如,下面的程序中的复选框,由于设置了它的AutoCheck属性为false,则该属性将不能自动进行状态切换。private void MySub()CheckBox CheckBox1=new CheckBox();/生成复选框 CheckBox1.Appearance=Appearance.Button;/设置复选框的外观 CheckBox1.AutoCheck=false;/禁止状态的自动切换 Form1.Controls.Add(CheckBox1);随着Windows操作系统的发展,复选框又增加了一个中间状态。如果希望复选框具有中间状态,则必须
35、设置复选框组件的ThreeState属性为true。由于复选框的Checked属性只能表示选中和不选中两种状态。显然,这个时候仍然通过Checked属性来获得复选框的状态就不是很合适了。复选框中还定义了一个CheckState属性来描述它的当前状态,该属性的值可以是:Checked复选框处于选中状态Unchecked复选框处于没选中状态Interminate复选框处于中间状态复选框中的文本可以排列在方框的左边,也可以排列在方框的右边,具体的排列方式由复选框组件的CheckAlign属性进行控制。CheckAlign属性如下所示:Button垂直方向排列在底部ButtonCenter垂直方向排列
36、在底部,水平方向居中对齐ButtonLeft垂直方向排列在底部,水平方向左对齐ButtonRight垂直方向排列在底部,水平方向右对齐Center水平方向排列在中央Left水平方向排列在左侧Middle垂直方向排列在中间MiddleCenter垂直方向排列在中间,水平方向居中对齐MiddleLeft垂直方向排列在中间,水平方向左对齐MiddleRight垂直方向排列在中间,水平方向右对齐Right水平方向排列在右侧Top垂直方向排列在顶部TopCenter垂直方向排列在顶部,水平方向居中对齐TopLeft垂直方向排列在顶部,水平方向左对齐TopRight垂直方向排列在顶部,水平方向右对齐关于复
37、选框的状态和排列方式的使用还可以参考下面的例子:public void MySub()Label1.Text=”ThreeState:”+CheckBox1.ThreeState.ToString();if(CheckBox1.ThreeState=false)/改变复选框的状态 CheckBox1.ThreeState=true;CheckBox1.CheckAlign=System.Drawing.ContentAlignment.MiddleRight;else CheckBox1.ThreeState=false;CheckBox1.CheckAlign=System.Drawing.
38、ContentAlignment.MiddleLeft;复选框中使用的比较多的事件是CheckedChanged事件、CheckedStateChanged事件和Click事件,其中前面两个是在复选框的状态发生变化的时候被触发,后者则是用户单击复选框时被触发。2、单选按钮单选按钮涉及到一个分组按钮。若干个单选按钮构成一组,在每一组中只允许同时选中其中的一个。除此之外,单选按钮和复选按钮的用法基本上是相同的。下面的程序生成了一个单选按钮,然后设置它的Appearance属性为Button,然后设置AutoCheck属性为false:private void MySub()RadioButton
39、RadioButton 1=new RadioButton();/生成单选按钮 RadioButton1.Appearance=Appearance.Button;/设置单选按钮的外观 RadioButton 1.AutoCheck=false;/禁止状态的自动切换 Form1.Controls.Add(RadioButton 1);那么,RadioButton是怎样事先分组的呢?要实现所谓的分组,实际上就是要寻找一个“容器”中。C#中可以通过组件GroupBox和Panel组件来实现对单选按钮的分组。首先在表单中放置一个GroupBox组件,然后把单选按钮拖放到GroupBox当中,所有位于
40、同一个GroupBox组件的单选按钮都输入同一个单选按钮组。位于GroupBox组件内部的单选按钮组和其外部的单选按钮组是相互独立的。5.3.7 ListBox控件 列表框(ListBox)控件显示一个项的列表,用户可以从中选择一项或多项。例5-3 创建一个窗体,在该窗体中添加一个ListBox、一个TextBox和4个Button。实现的功能:系统首先由程序动态的向列表框添加10个选择项,用户可以通过在TextBox中输入文字,从而添加到ListBox中,如果TextBox为空,则提示用户输入。单击“选中的项”按钮显示当前被选中的项的内容。单击“删除”按钮删除当前被选中的项。单击“清空”按钮
41、删除ListBox中所有的项。详细代码如下:namespace ListBox1 public partial class Form1:Form public Form1()InitializeComponent();this.InitializeListBox();private void InitializeListBox()for(int i=1;i=10;i+)this.listBox1.Items.Add(i.ToString();private void button1_Click(object sender,EventArgs e)if(this.textBox1.Text!=)
42、this.listBox1.Items.Add(this.textBox1.Text);this.textBox1.Text=;else MessageBox.Show(请输入添加的内容!请输入添加的内容!);this.textBox1.Focus();private void button2_Click(object sender,EventArgs e)string msg=;if(this.listBox1.SelectedItem!=null)msg+=this.listBox1.SelectedItem+;if(msg=)MessageBox.Show(没有项被选中!没有项被选中!)
43、;else MessageBox.Show(msg+被选中!被选中!);private void button3_Click(object sender,EventArgs e)if(this.listBox1.SelectedIndex!=-1)this.listBox1.Items.RemoveAt(this.listBox1.SelectedIndex);else MessageBox.Show(没有项被选中!没有项被选中!);private void button4_Click(object sender,EventArgs e)this.listBox1.Items.Clear();
44、结果如下:5.3.8 ComboBox控件程序员可以通过下拉列表框(comboBox)列出用户可做的选择,并允许用户选择其中一项,程序可以读取被选取的项,从而得到用户数据。例5-4 创建一个窗体,添加一个ComboBox和一个Label。实现的功能:程序利用循环语句动态的向下拉列表框添加10个选择项,用户可以对10个选项进行选定,当更改选择项时,Label控件显示被选中的项。详细代码如下:namespace ComboBox1public partial class Form1:Form public Form1()InitializeComponent();this.InitializeCo
45、mboBox();private void InitializeComboBox()for(int i=1;i=10;i+)boBox1.Items.Add(i.ToString();private void comboBox1_SelectedIndexChanged(object sender,EventArgs e)this.label1.Text=boBox1.SelectedItem+is selected!;5.3.9 GroupBox控件分组框控件(GroupBox)可以为其他控件提供分组。当移动单个GroupBox控件时,它包含的所有控件也会一起移动。例5-5 创建一个窗体,在
46、该窗体中添加一个GroupBox和一个Button,实现的功能:系统首先由程序在groupbox1上动态添加5个选择项,用户可以勾选这5个CheckBox。单击button1按钮,程序遍历这5个CheckBox,并显示当前被选中的项的内容。详细代码如下:namespace GroupBox1public partial class Form1:Form public Form1()InitializeComponent();this.AddCheckBoxes();private void AddCheckBoxes()for(int i=1;i=5;i+)CheckBox cb=new Ch
47、eckBox();cb.Name=cb+i.ToString();cb.Text=CheckBox+i.ToString();cb.Location=new Point(20,10+20*(i-1);cb.Size=new Size(150,25);this.groupBox1.Controls.Add(cb);this.groupBox1.Height=120;private void button1_Click(object sender,EventArgs e)string msg=;foreach(Control c in this.groupBox1.Controls)if(c.Ge
48、tType().Name.Equals(CheckBox)if(CheckBox)c).Checked)msg+=(CheckBox)c).Text+;if(msg=)MessageBox.Show(No box is checked!);else MessageBox.Show(msg+are checked!);5.3.10 ListView控件 列表视图控件(ListView)与列表框相似,但是它可以显示带图标的项的列表,可以创建类似于Windows资源管理器的用户界面。它支持4种视图模式:LargeIcon(大图标)、SmallIcon(小图标)、List(列表)和Details(详细
49、信息)。例5-6 以Details视图为例,创建一个窗体,在该窗体中添加一个ListView、两个TextBox和4个Button。实现的功能是:系统首先由程序动态的向列表视图添加10个选择项,用户可以通过在两个TextBox中输入文字,分别作为两项添加到ListView中,如果TextBox为空,则提示用户输入。单击“选中的项”显示当前被选中的项的内容。单击“删除”按钮删除当前被选中的项。单击“清空”按钮删除ListView中所有的项。详细代码如下:namespace ListView1public partial class Form1:Form public Form1()Initial
50、izeComponent();this.InitializeListView();private void InitializeListView()for(int i=1;i=10;i+)string str=new string2 i.ToString(),i.ToString();this.listView1.Items.Add(new ListViewItem(str);private void button1_Click(object sender,EventArgs e)if(this.textBox1.Text=)MessageBox.Show(请输入添加的内容!请输入添加的内容!