1.15k likes | 1.38k Vues
第 5 章 Windows 应用程序开发. Windows 窗体是用于 Microsoft Windows 应用程序开发基于 .NET 框架的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,得以开发丰富的 Windows 应用程序。另外, Windows 窗体可作为多层分布式解决方案中的本地用户界面。. 5.1 开发应用程序的步骤. 利用 Visual C# 开发应用程序一般包括建立项目、界面设计、属性设计、代码设计等步骤。 1 .建立项目
E N D
第5章 Windows应用程序开发 • Windows 窗体是用于 Microsoft Windows 应用程序开发基于.NET 框架的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,得以开发丰富的 Windows 应用程序。另外,Windows 窗体可作为多层分布式解决方案中的本地用户界面。
5.1 开发应用程序的步骤 • 利用Visual C#开发应用程序一般包括建立项目、界面设计、属性设计、代码设计等步骤。 • 1.建立项目 • 在Visual Studio.NET开发环境中选择“文件”菜单,选择“新建”选项中的“项目”,如图5.1所示。 图5.1 “新建项目”对话框
1.建立项目 • 在“项目类型”列表框指定为“Visual C#项目”,在“模板”列表框里指定“Windows应用程序”作为模板,表示将以Visual C#作为程序设计语言,建立一个基于Windows界面的应用程序。同时在“位置”和“名称”列表框选择文件的保存位置和设定项目文件的名字。然后,单击“确定”,返回Visual Studio.NET的主界面,如图5.2所示。 图5.2 集成开发环境
5.1 开发应用程序的步骤 • 2.界面设计 • 在Visual Studio.NET的主界面,系统提供了一个缺省的窗体。可以通过工具箱向其中添加各种控件来设计应用程序的界面。具体操作是用鼠标按住工具箱需要添加的控件,然后拖放到窗体中即可。本例向窗体中分别添加2个button控件、3个label控件和3个textBox控件,调整各个控件的大小和位置如图5.3所示。 图5.3 应用程序设计界面
5.1 开发应用程序的步骤 • 3.设置属性 • 首先,在窗体中选中控件。然后在属性窗口设置该控件相应的属性。如表5.1所示。 表5.1 控件属性
5.1 开发应用程序的步骤 • 4.编写程序代码 • 进入开发环境的代码编辑器。编写代码如下: • static void Main() • { • Application.Run(new Form1()); • } • private void button1_Click(object sender, System.EventArgs e) • { • long op1,op2,result; • if ( (textBox1.Text == "")|| (textBox2.Text=="")) • { • MessageBox.Show(this,"null","msg",MessageBoxButtons.OK , • MessageBoxIcon.Information ); • return; • }
4.编写程序代码 • try • { • op1=Convert.ToInt64(textBox1.Text ); op2=Convert.ToInt64(textBox2.Text ); result=op1+op2; • textBox3.Text =Convert.ToString (result ); • } • catch(Exception el) • { • MessageBox.Show • (this,el.Message ,"msg",MessageBoxButtons.OK,Message • BoxIcon.Warning ); • } • } • private void button2_Click(object sender, System.EventArgs e) • { • this.Close(); • }
4.编写程序代码 • 同时,系统将自动生成以下代码。 • private System.Windows.Forms.Label label1; • private System.Windows.Forms.Label label2; • private System.Windows.Forms.Label label3; • private System.Windows.Forms.Button button1; • private System.Windows.Forms.Button button2; • private System.Windows.Forms.TextBox textBox1; • private System.Windows.Forms.TextBox textBox2; • private System.Windows.Forms.TextBox textBox3;
5.1 开发应用程序的步骤 • 6.保存项目 • 在“文件”菜单,单击“全部保存”或在工具条中单击“保存”按钮。 • 5.程序运行与调试 • 程序运行如图5.4所示。如果运行出错或者运行结果不正确,则查找错误,修正代码后运行。 图5.4 应用程序运行
5.2窗体 • 窗体是标准窗口、多文档界面 (MDI) 窗口、对话框或图形化例程的显示表面。可以将控件放入窗体用来定义用户界面。窗体是对象,这些对象可以定义其外观的属性、定义其行为的方法以及定义其与用户的交互的事件。通过设置窗体的属性以及编写响应其事件的代码,可自定义该对象以满足应用程序的要求。 • 在 Windows 窗体项目内,窗体是用户交互的主要载体。通过组合不同控件集和编写代码,可从用户得到信息并响应该信息、使用现有数据存储、以及查询并写回到用户本地计算机上的文件系统和注册表中。窗体可以在“代码编辑器”中创建,也可以使用“Windows 窗体设计器”创建和修改窗体。
5.2.1 创建Windows应用程序项目 • 在“文件”菜单上选择 “新建”,然后选择“项目”。在左侧窗格中,选择所需语言。在右侧窗格中,选择“Windows 应用程序”。“Windows 窗体设计器”打开,显示所创建项目,如图5.5所示。 图5.5 创建的项目
5.2.1 创建Windows应用程序项目 • 系统包含三种样式窗体: • (1) 单文档界面 (SDI): 例如,Microsoft Windows 中包括的“写字板”应用程序就是SDI类型的界面。在“写字板”中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档。 • (2) 多文档界面(MDI):例如,Microsoft Word、Microsoft Excel等就是多文档界面 (MDI) 应用程序。 • (3) 资源管理器样式界面:例如,Windows 资源管理器。 • Windows 应用程序可能需要多个窗体,可以向项目添加多个窗体。添加从“Forms”类继承的Windows 窗体,只要在“解决方案资源管理器”中,右击项目并选择“添加”,然后选择“Windows 窗体”。添加从以前创建的窗体类继承的 Windows 窗体只要在“解决方案资源管理器”中,右击项目并选择“添加”,然后选择“继承的窗体”。 • 在“Windows 窗体设计器”内,可查看项目内的窗体及其控件。
5.2.2 选择启动窗体 • 从“新建项目”对话框中选择“Windows 应用程序”所创建的窗体,在默认情况下将成为启动窗体。启动窗体可以根据需要进行设置或更改,在“解决方案资源管理器”中,右击项目并选择“属性”,“项目”属性页打开。选择“通用”属性,从“启动对象”下拉列表中选择要作为启动窗体的窗体。
5.2.3 窗体属性 • 1.Visible 属性 • 窗体的可见性通常由 Visible 属性控制。在事件中,如果希望 Windows 应用程序的主窗体在应用程序启动时不可见,将会发现将它的 Visible 属性设置为假的方法无效,因为通常启动窗体的生存期决定了应用程序的生存期,只要将应用程序的启动变为一个模块,这样就可以随意使窗体可见(和不可见),因为当“关闭”模块时,应用程序的生存期也随之结束。 • 2.TopMost 属性 • TopMost 属性控制窗体是否为最顶端的窗体。请注意,即使最顶端的窗体不处于活动状态,它也会浮在其他非最顶端窗体之前。 • 在设计时使窗体成为 Windows 窗体应用程序中最顶端的窗体,只要在“属性”窗口中将 TopMost 属性设置为 true。 • 以编程方式使窗体成为 Windows 窗体应用程序中最顶端的窗体,只要采用将 TopMost 属性设置为 true的代码:例如: • public void MakeOnTop() • { • myTopForm.TopMost = true; • }
5.2.3 窗体属性 • 3.FormBorderStyle 属性 • 当确定 Windows 窗体的外观时,有几种边框样式可供选择,如表5.2。 表5.2 窗体的边框风格 注意:所有上述边框样式(除“无”设置外),都在标题栏的右侧有一个“关闭”框。
5.2.3 窗体属性 • 4.Location 属性 • Location 属性值可指定窗体在计算机屏幕上的显示位置。它以像素为单位指定窗体左上角的位置。还需要设置 StartPosition 属性,以指示显示区域的边界。 • Windows应用程序的 StartPosition 属性的默认设置是“WindowsDefaultLocation”,该设置通知操作系统在启动时根据当前硬件计算该窗体的最佳位置。另一种选择是将 StartPosition 属性设置为 Center,然后在代码中更改窗体的位置。 • ● 使用“属性”窗口定位窗体 • 在 “属性”窗口中,从下拉菜单选择窗体。将窗体的 StartPosition 属性设置为 Manual。 • 为Location属性键入值(以逗号分隔)来定位该窗体,其中第1个数字(X)是到显示区域左边界的距离(像素),第2个数字(Y)是到显示区域上边界的距离(像素)。 • ● 以编程方式定位窗体 • 在运行时,将窗体的Location属性设置为Point来定义窗体的位置,例如: Form1.Location = new Point (100, 100); • 或使用Left子属性(用于 X 坐标)和Top子属性(用于Y坐标)更改窗体位置的X坐标和 • Y坐标。例如,将窗体的X坐标调整为300个像素点: • Form1.Left = 300;
4.Location 属性 • ● 窗体中控件位置 • 控件是窗体上的一个组件,用于显示信息或接受用户输入。大多数窗体都是通过将控件添加到窗体表面来定义控件的位置。 • ●将控件拖动到窗体上 • 在“工具箱”中,单击所需控件并将其拖动到窗体上。也可双击“工具箱”中的控件,将该控件按其默认大小添加到窗体的左上角。 • 在运行时可动态地将控件添加到窗体中。在下面的示例中,当单击“按钮”(Button) 控件时,“文本框”(TextBox) 控件将添加到窗体中。 • 在窗体的类的内部,在处理按钮的 Click 事件的方法中,插入类似于以下内容的代码,以添加对控件变量的引用,设置控件的“位置”,然后添加该控件: • private void button1_Click(object sender, System.EventArgs e) • { • TextBox myText = new TextBox(); • myText.Location = new Point(25,25); • this.Controls.Add (myText); • }
5.3 Windows控件使用 • 5.3.1常用控件和属性 • 表5.3列出了常用的Windows 窗体控件。 表5.3 常用Windows控件
5.3.1常用控件和属性 • 控件都有很多属性,并且大多数控件的属性都派生于System.Windows.Forms.Control 类,所以它们都有一些共同的属性。见表5.4所示。 表5.4 Control类的常见属性
5.3.1常用控件和属性 • 控件对用户或应用程序的某些行为做出相应的响应,这些行为称做事件。Control类的常见事件如表5.5所示: 表5.5 Control类的常见事件
5.3.2 Label 控件和LinkLabel 控件 • Windows 窗体 Label 控件用于显示用户不能编辑的文本或图像。 • Label 控件也可以用来为其他控件定义访问键。在标签 (Label) 控件中定义访问键时,用户可以按 ALT 键和指定字符将焦点移动到 Tab 键顺序中的下一个控件上。因为标签无法接收焦点,所以焦点自动移动到Tab键顺序中的下一个控件上。 • 标签中显示的标题包含在 Text 属性中,文本在标签内的对齐方式可以通过Alignment 属性设置。
5.3.2 Label 控件和LinkLabel 控件 • 【例5.3】向带标签的控件分配访问键。 • 打开项目和窗体,先建立一个标签,然后按任意顺序绘制控件,并将该标签的 TabIndex 属性设置为比另一个控件小 1。将该标签的 UseMnemonic 属性设置为 true。在该标签的 Text 属性中使用“and”符 (&) 为该标签分配访问键。 • 例如: • label1.UseMnemonic = true; • label1.Text = "&Print"; • label2.UseMnemonic = true; • label2.Text = "&Copy && Paste";
5.3.2 Label 控件和LinkLabel 控件 • 【例5.4】使用 LinkLabel 控件链接到另一个窗体。 • 将 Text 属性设置为“打开另一窗体”。设置 LinkArea 属性,将标题的全部指示为链接,指示的方式取决于该链接标签与外观相关的属性,这里使用默认值。 • 在 LinkClicked 事件处理程序中,调用Show方法以打开项目中的另一个窗体,并将 LinkVisited属性设置为true。如图5.6所示。 • protected void LinkLabel1_LinkClicked(object sender, System.EventArgs e) • { • // 显示另一个窗口. • Form f2 = new Form(); • f2.Show(); • linkLabel1.LinkVisited = true; • } 图5.6 链接到另一个窗体
5.3.2 Label 控件和LinkLabel 控件 • 【例5.5】使用LinkLabel控件启动Internet Explorer并链接到Web页。 • 将Text属性设置为适当的标题。设置LinkArea属性以确定将标题的哪一部分指示为链接。 • 在 LinkClicked 事件处理程序中,将LinkVisited属性设置为true,并使用 Process.Start方法以某个URL启动默认浏览器。若要使用Process.Start方法,需要向 System.Diagnostics 命名空间添加一个引用。 • 例如: • protected void LinkLabel1_LinkClicked(object sender, System.EventArgs e) • { • //通过设置LinkVisited属性为真来改变连接文本的颜色 linkLabel1.LinkVisited = true; • // 调用Process.Start方法来通过一个URL打开默认的浏览器 System.Diagnostics.Process.Start("http://www.Microsoft.com"); • }
5.3.3 Button 控件 • Windows窗体Button控件允许用户通过单击来执行操作。每当用户单击按钮时,即调用Click事件处理程序。可将代码放入Click事件处理程序来执行所需要的操作。 • 在任何Windows窗体上都可以指定某个Button 控件为接受按钮(也称作默认按钮)。每当用户按 ENTER 键时,即单击默认按钮,而不管当前窗体上其他哪个控件具有焦点。在设计器中指定接受按钮的方法是:选择按钮所驻留的窗体,在“属性”窗口中将窗体的AcceptButton属性设置为Button控件的名称。也可以以编程方式指定接受按钮,在代码中将窗体的 AcceptButton 属性设置为适当的 Button 控件。 例如: • private void SetDefault(Button myDefaultBtn) • { • this.AcceptButton = myDefaultBtn; • }
5.3.3 Button 控件 • 在任何 Windows 窗体上都可以指定某个 Button 控件为取消按钮。每当用户按 ESC 键时,即单击取消按钮,而不管窗体上的其他哪个控件具有焦点。通常设计这样的按钮可以允许用户快速退出操作而无须执行任何动作。 • 在设计器中指定取消按钮方法:选择按钮所驻留的窗体后,在“属性”窗口中,将窗体的CancelButton 属性设置为 Button 控件的名称。也可以以编程方式指定取消按钮,将窗体的 CancelButton 属性设置为适当的 Button 控件。例如: • private void SetCancelButton(Button myCancelBtn) • { • this.CancelButton = myCancelBtn; • } • Windows窗体Button 控件的最基本用法是在单击按钮时运行某些代码。例如: • private void button1_Click(object sender, System.EventArgs e) • { • MessageBox.Show("button1 was clicked"); • }
5.3.3 Button 控件 • Button控件最常用的事件是Click,单击 Button 控件还生成许多其他事件,如 MouseEnter、MouseDown 和 MouseUp 事件。 • Button控件不支持双击事件,如果用户尝试双击 Button 控件,将分别以单击单独处理。
5.3.4 TextBox 控件 • Windows 窗体文本框用于获取用户输入或显示文本。TextBox 控件通常用于可编辑文本,不过也可使其成为只读控件。文本框可以显示多个行,这时它对文本换行使其符合控件的大小。TextBox 控件只能对显示或输入的文本提供单个格式化样式。若要显示多种类型的带格式文本,可以使用 RichTextBox 控件。 • 控件显示的文本包含在 Text 属性中。默认情况下,最多可在一个文本框中输入 2048 个字符。如果将 MultiLine 属性设置为 true,则最多可输入 32 KB 的文本。Text 属性可以在设计时使用“属性”窗口设置,也可在运行时用代码设置,或者在运行时通过用户输入来设置。在运行时通过读取 Text 属性来得到文本框的当前内容。
5.3.4 TextBox 控件 • 下面的代码在运行时设置控件中的文本。 • private void InitializeMyControl() • { • // 初始化把文本放入控件中. • textBox1.Text = "This is a TextBox control."; • } • InitializeMyControl 过程不会自动执行,而需进行调用。 • 文本框控件最常用的事件是TextChanged事件。当文本框的内容发生变化的时候就触发这个事件。
5.3.4 TextBox 控件 • TextBox控件应用很广,下面分别说明。 • ● 控制TextBox控件中字符的插入点 • 当 Windows 窗体 TextBox 控件最初收到焦点时,文本框内的默认插入位置是在任何现有文本的左边。用户可以使用键盘或鼠标来移动插入点。如果文本框失去焦点而后又再次获得焦点,则插入点为用户上一次放置的位置。 • 将 SelectionStart 属性设置为适当值。如果值为零,则插入点紧挨第一个字符的左边。将 SelectionLength 属性设置要选择的文本的长度。 • 下面的代码总是将插入点返回到 0。当然必须将 TextBox1_Enter 事件处理程序绑定到该控件。 • private void textBox1_Enter(Object sender, System.EventArgs e) • { • textBox1.SelectionStart = 0; • textBox1.SelectionLength = 0; • }
5.3.4 TextBox 控件 • ● 创建密码文本框 • 密码框是一种 Windows 窗体文本框,它在用户键入字符串时显示占位符。 • 将TextBox 控件的 PasswordChar 属性设置为某个特定字符。PasswordChar属性指定在文本框中显示的字符。例如,如果希望在密码框中显示星号,则请在“属性”窗口中将PasswordChar属性指定为 “*”。运行时,无论用户在文本框中键入什么字符,都显示为星号。 • 下面的代码将初始化一个文本框,此文本框接受最长可达 14 个字符的字符串,并显示星号来替代字符串。 • private void InitializeMyControl() • { • // 设置文本内容为空. • textBox1.Text = ""; • //密码框的字符设为“*” • textBox1.PasswordChar = '*'; • // 控件不允许超过14个字符. • textBox1.MaxLength = 14; • }
5.3.4 TextBox 控件 • ● 以编程方式选择文本 • 在Windows 窗体 TextBox 控件中,可以以编程方式选择文本。例如,如果创建一个可在文本中搜索特定字符串的函数,就可以选择那些文本,将找到的字符串的位置醒目地通报给读者。 • 将 SelectionStart 属性设置为要选择的文本的开始位置。SelectionStart 属性是一个数字,指示文本字符串内的插入点,值为 0 表示最左边的位置。如果将 SelectionStart 属性设置为等于或大于文本框内的字符数的值,则插入点被放在最后一个字符后。 • 将 SelectionLength 属性设置为要选择的文本的长度。SelectionLength 属性是一个设置插入点宽度的数值。如果将 SelectionLength 设置为大于0 的数,则会选择该数目的字符,开始位置是当前插入点。 • 通过 SelectedText 属性访问选定的文本。
5.3.4 TextBox 控件 • 下面的代码将在控件的 Enter 事件发生时选择文本框的内容。必须将 TextBox1_Enter 事件处理程序绑定到控件。 • private void textBox1_Enter(object sender,System.EventArgs e) • { • textBox1.SelectionStart = 0; • textBox1.SelectionLength = textBox1.Text.Length; • } • 文本框控件还提供了一些方法,方便用户使用。 • Clear:清除文本框中的文本 • AppendText:向文本框里添加文字 • Copy:复制文本框的文本到剪贴板 • Cut:剪切文本框文本到剪贴板 • Paste:用剪贴板内容替换文本框文本 • Select:在文本框中选择指定范围的文本 • SelectAll:选择文本框所有内容 • 下面给出TextBox的应用示例。
5.3.4 TextBox 控件 • 【例5.6】创建一个带垂直滚动条的多行 TextBox 控件。 • private void CreateMyMultilineTextBox() • { • // 创建一个TextBox控件 • TextBox textBox1 = new TextBox(); • // 设置为多行 • textBox1.Multiline = true; • // 添加滚动 • textBox1.ScrollBars = ScrollBars.Vertical; • //允许换行 • textBox1.AcceptsReturn = true; • // 允许使用Tab键 • textBox1.AcceptsTab = true; • textBox1.WordWrap = true; • // 设置初始值 • textBox1.Text = "Welcome!"; • }
【例5.6】 • 运行结果如图5.7所示。 图5.7 运行结果
5.3.5 RadioButton控件 • RadioButton控件旨在为用户提供两种或多种设置以便选择其一。 • 当单击 RadioButton 控件时,其 Checked 属性设置为 true,并且调用 Click 事件处理程序。当 Checked 属性的值更改时,将引发 CheckedChanged 事件。如果 AutoCheck 属性设置为 true(默认),则当选择单选按钮时,将自动清除该组中的所有其他单选按钮。通常仅当使用验证代码以确保选定的单选按钮是允许的选项时,才将该属性设置为 false。用 Text 属性设置控件内显示的文本,该属性可以包含访问键快捷方式。访问键允许用户通过同时按 ALT 键和访问键来“单击”控件。 • 如果将 Appearance 属性设置为Appearance.Button,则RadioButton控件的外观可以像命令按钮一样。当选定它时,它看似已被按下。单选按钮还可以使用Image和ImageList属性显示图像。 • 在一个容器(如Panel控件、GroupBox 控件或窗体)内绘制单选按钮即可将它们分组。直接添加到一个窗体中的所有单选按钮将形成一个组。若要添加不同的组,必须将它们放到面板或分组框中。 • 将RadioButton控件分组使之独立于其他组工作。具体做法是:将GroupBox控件或Panel控件从“工具箱”的“Windows 窗体”选项卡拖到窗体上。 然后在GroupBox控件或Panel控件上绘制RadioButton控件即可。
5.3.5 RadioButton控件 • 下面的代码创建和初始化一个 RadioButton,并为其赋予切换按钮的外观,同时将它的 AutoCheck属性设置为 false,然后将它添加到 Form中。例如: • private void InitializeMyRadioButton() • { • //创建一个 RadioButton. • RadioButton radioButton1 = new RadioButton(); radioButton1.Appearance = Appearance.Button; • // 选中时不传值 • radioButton1.AutoCheck = false; • // 把RadioButton放入窗体中 • Controls.Add(radioButton1);}
5.3.6 CheckBox控件 • Windows 窗体复选框 (CheckBox)虽然和单选按钮复选框看似功能类似,却存在重要差异:当用户选择某单选按钮时,同一组中的其他单选按钮不能同时选定。相反,却可以选择任意数目的复选框。 • Windows 窗体 CheckBox 控件常用于为用户提供是/否或真/假选项。可以成组使用复选框 (CheckBox) 控件以显示多重选项,用户可以从中选择一项或多项。多个复选框可以使用GroupBox 控件进行分组。这对于可视外观以及用户界面设计很有用,因为成组控件可以在窗体设计器上一起移动。 • CheckBox 控件有两个重要属性 Checked 和 CheckState。Checked 属性返回 true 或 false。CheckState 属性返回 CheckState.Checked(选择) 或CheckState.Unchecked(未选择);或者,如果 ThreeState 属性设置为 true,CheckState 还可能返回 CheckState.Indeterminate(不确定状态)。在不确定状态,复选框以浅灰色显示,以表示该选项不可用。 • 每当用户单击某 Windows 窗体 CheckBox 控件时,便发生 Click 事件。可以编写应用程序以根据复选框的状态执行某些操作。
5.3.6 CheckBox控件 • 在Click事件处理程序中,使用Checked属性确定控件的状态,以执行任何必要操作。 • private void checkBox1_Click(object sender, System.EventArgs e) • { • // 复选框控件的文本属性在每次控件被单击的时候都会改变,表明被选择或 • 者不被选择. • if (checkBox1.Checked) • { • checkBox1.Text = "Checked"; • } • else • { • checkBox1.Text = "Unchecked"; • } • }
5.3.6 CheckBox控件 • 使用 case 语句查询 CheckState 属性的值以确定操作的进程。当 ThreeState 属性设置为 true 时,CheckState 属性可以返回三个可能值,表示该复选框已选中、未选中或第三种不确定状态 • private void checkBox1_Click(object sender, System.EventArgs e) • { • switch(checkBox1.CheckState) • { • case CheckState.Checked: • // 被选择状态 • case CheckState.Unchecked: • // 未选择状态 • case CheckState.Indeterminate: • // 不确定状态. • } • 注意 当 ThreeState 属性设置为 true 时,Checked 属性对 CheckState.Che • cked 和 CheckState.Indeterminate 均返回 true。
5.3.6 CheckBox控件 • 下面的代码检查 Checked 属性的值以确定其状态,并设置选项。 • private void SetOptions() • { • // 创建一个新的对象并且根据两个复选框控件的值设置它的属性// 你必须 • 为”myobject”设置一个合适的对象类型 • MyObject myObj = new MyObject(); • // 假设对象有个叫作"Property1" and "Property2."的属性 myObj.Property1 = CheckBox1.Checked; • myObj.Property2 = CheckBox2.Checked; • }
5.3.7 ListBox控件 • ListBox 控件用于显示列表项,用户可从中选择一项或多项。如果总项数超出可以显示的项数,则自动向ListBox控件添加滚动条。当 MultiColumn 属性设置为 true 时,列表框以多列形式项,并且会出现一个水平滚动条。当 MultiColumn 属性设置为 false 时,列表框以单列形式显示,并且会出现一个垂直滚动条。当ScrollAlwaysVisible设置为true时,无论项数多少都将显示滚动条。SelectionMode属性确定一次可以选择多少列表项。 • SelectedIndex 属性返回对应于列表框中第一个选定项的整数值。通过在代码中更改 SelectedIndex 值,可以编程方式更改选定项。如果未选定任何项,则SelectedIndex值为 -1。如果选定了列表中的第一项,则 SelectedIndex 值为 0。当选定多项时,SelectedIndex值反映列表中最先出现的选定项。SelectedItem 属性类似于 SelectedIndex,但它返回项本身,通常是字符串值。Items.Count 属性反映列表中的项数,并且Items.Count属性的值总比SelectedIndex的最大可能值大1,因为SelectedIndex是从零开始的。 • 若要在 ListBox 控件中添加或删除项,可使用 Items.AddItems.Insert、Items.Clear 或 Items.Remove 方法。或者在设计时使用Items属性向列表添加项。
5.3.7 ListBox控件 • 【例5.7】创建一个 ListBox 控件,在该控件的多列中显示多个项,并且在控件列表中能够选定多个项。 • 设计窗体Form1,在窗体中加入命令按钮Button1,在Button1单击事件中加入如下代码: • private void button1_Click(object sender, System.EventArgs e) • { • // 创建一个ListBox. • ListBox listBox1 = new ListBox(); • // 设置大小和位置 • listBox1.Size = new System.Drawing.Size(200, 100); • listBox1.Location = new System.Drawing.Point(10,10); this.Controls.Add(listBox1); • // 显示多行 • listBox1.MultiColumn = true; • // 设置可多行选择 • listBox1.SelectionMode = SelectionMode.MultiExtended; listBox1.BeginUpdate(); • for (int x = 1; x <= 50; x++)
【例5.7】 • { • listBox1.Items.Add("Item " + x.ToString()); • } • listBox1.EndUpdate(); • // 选择ListBox中的三项 • listBox1.SetSelected(1, true); • listBox1.SetSelected(3, true); • listBox1.SetSelected(5, true); • // 在控制台上显示选中的第一项与第二项 • System.Diagnostics.Debug.WriteLine(listBox1.SelectedItems[1].ToString()); • System.Diagnostics.Debug.WriteLine(listBox1.SelectedIndices[0].ToString()); • }
【例5.7】 • 运行结果如图5.8所示。 图5.8 运行结果
5.3.8 ComboBox控件 • ComboBox 控件用于在下拉组合框中显示数据。默认情况下,ComboBox 控件分两个部分显示:顶部是一个允许用户键入列表项的文本框。第二个部分是列表框,它显示用户可以从中进行选择的项的列表。 • SelectedIndex 属性返回一个整数值,该值与选定的列表项相对应。通过在代码中更改 SelectedIndex 值,可以编程方式更改选定项;列表中的相应项将出现在组合框的文本框部分。如果未选定任何项,则 SelectedIndex 值为 -1。如果选定列表中的第一项,则 SelectedIndex 值为 0。SelectedItem 属性与 SelectedIndex 类似,但它返回项本身,通常是一个字符串值。Items.Count 属性反映列表中的项数,并且 Items.Count 属性的值总比 SelectedIndex 的最大可能值大 1,因为 SelectedIndex 是从零开始的。 • 若要在 ListBox 控件中添加或删除项,可以使用 Items.Add、Items.Insert、Items.Clear 或 Items.Remove 方法。或者,可以在设计器中使用 Items 属性向列表添加项。
5.3.8 ComboBox控件 • 【例5.8】综合应用,实现的功能是:在文本框中输入字符,点击“添加”向 ComboBox 添加项;在文本框中输入字符,点击“查找”查询 ComboBox 中的项;点击“添加1000个项”向ComboBox中添加1000个数据项;点击“被选择的项是:”,弹出对话框,显示选择的项。 • 代码如下: • using System; • using System.Windows.Forms; • namespace Win32Form1Namespace • { • public class Win32Form1 : System.Windows.Forms.Form • { • private System.Windows.Forms.Button addButton; • private System.Windows.Forms.TextBox textBox2; • private System.Windows.Forms.Button addGrandButton; • private System.Windows.Forms.ComboBox comboBox1; • private System.Windows.Forms.Button showSelectedButton; • private System.Windows.Forms.TextBox textBox1; • private System.Windows.Forms.Button findButton;
【例5.8】 • private System.Windows.Forms.Label label1; • public Win32Form1() • { • this.InitializeComponent(); • } • [System.STAThreadAttribute()] • public static void Main() • { • System.Windows.Forms.Application.Run(new Win32Form1()); • } • private void InitializeComponent() • { • this.addButton = new System.Windows.Forms.Button(); • this.textBox2 = new System.Windows.Forms.TextBox(); • this.addGrandButton = new System.Windows.Forms.Button(); • this.comboBox1 = new System.Windows.Forms.ComboBox();
【例5.8】 • this.showSelectedButton = new System.Windows.Forms.Button(); • this.textBox1 = new System.Windows.Forms.TextBox(); • this.findButton = new System.Windows.Forms.Button(); • this.label1 = new System.Windows.Forms.Label(); • this.addButton.Location = new System.Drawing.Point(248, 32); • this.addButton.Size = new System.Drawing.Size(40, 24); • this.addButton.TabIndex = 1; • this.addButton.Text = "添加"; • this.addButton.Click += new System.EventHandler(this.addButton_Click); • this.textBox2.Location = new System.Drawing.Point(8, 64); • this.textBox2.Size = new System.Drawing.Size(232, 20); • this.textBox2.TabIndex = 6; • this.textBox2.Text = ""; • this.addGrandButton.Location = new System.Drawing.Point(8, 96); • this.addGrandButton.Size = new System.Drawing.Size(280, 23); • this.addGrandButton.TabIndex = 2;
【例5.8】 • this.addGrandButton.Text = "添加1000个项"; • this.addGrandButton.Click += new System.EventHandler(this.addGrand • Button_Click); • this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Bottom | • System.Windows.Forms.AnchorStyles.Left)| • System.Windows.Forms.AnchorStyles.Right); • this.comboBox1.DropDownWidth = 280; • this.comboBox1.Items.AddRange(new object[] {"Item 1", • "Item 2", "Item 3", "Item 4", "Item 5"}); • this.comboBox1.Location = new System.Drawing.Point(8, 248); • this.comboBox1.Size = new System.Drawing.Size(280, 21); • this.comboBox1.TabIndex = 7; • this.showSelectedButton.Location = new System.Drawing.Point(8, 128); • this.showSelectedButton.Size = new System.Drawing.Size(280, 24); • this.showSelectedButton.TabIndex = 4; • this.showSelectedButton.Text = "被选择的项是:";