列表、循环和打印本章学习目标创建和使用列表框和组合框.
区别各种类型的组合框.
在属性窗口中使用选项集合将列表项输入列表框中.
在运行时添加和删除列表中的选项.
确定列表中被选中的选项.
使用Items.
Count属性决定列表中选项的数量.
显示列表中被选中的选项.
使用Do/Loop和For/Next语句的迭代来实现循环.
使用Exit语句来终止循环.
可以使用Continue语句跳转到下一个迭代循环.
可以使用PrintDocument类发送消息到打印机或者打印预览窗口.
通常我们会为用户提供一个可供选择的选项列表.
可以在窗体中使用Windows列表框和组合框控件来显示列表.
既可以在设计时,也可以在运行时,或者还可能是在这二者混合时,选择在列表中添加选项.
有很多风格的列表框可供选择;要添加哪种风格的列表框,不仅需要考虑设计和空间,还要考虑用户是否需要在列表中添加选项.
7.
1列表框和组合框列表框和组合框都允许拥有一个可供用户选择的选项列表.
图7-1显示的是工具箱中用于创建控件的工具.
图7-2中显示的是几种不同类型的列表框和组合框,包括简单列表框、简单组合框、下拉组合框以及下拉列表框.
在图7-2中的窗体左边的列表框就是用工具箱中的列表框工具创建的,右边的组合框是用组合框工具创建的.
注意这三种组合框的区别.
列表框和组合框在属性和操作方面有许多相似的地方.
但是也有不同,组合框控件的DropDownStyle属性可以决定是否包含文本框允许用户输入或者是否包含下拉式列表(如图7-2所示).
第章7VisualBasic2008程序设计(第7版)282列表框和组合框都有一个不错的特性.
如果框太小而显示不了所有的选项时,VB会自动添加一个滚动条.
我们不需要关心滚动条在滚动框中的位置,系统会自动处理.
组合框列表框图7-1使用列表框工具和组合框工具在窗体上创建列表框和组合框各种列表框下拉组合框(用户可以在顶部的文本框中输入文本)简单组合框(用户可以在顶部的文本框中输入文本)下拉列表框(顶部没有文本框:在运行时,用户不能输入新的文本)图7-2列表框和组合框的各种样式当在窗体上添加列表控件时,选择控件的样式要按照所能使用的窗体空间和操作控件的方式来决定.
是否需要用户在已有的列表中进行选择呢如果是,可以使用简单列表框或下拉式列表框(组合框的属性DropDownStyle=DropDownList).
是否希望用户能根据需要输入新的选项.
如果是,有两种样式可供选择:使用下拉组合框(DropDownStyle=DropDown),或者使用简单组合框(DropDownStyle=Simple).
在设计时,列表框和组合框有着不同的行为方式.
对于列表框,VB在控件中显示Name属性;对于组合框,则显示Text属性,其默认值为空.
在设计时不用考虑使列表框显示为空,因为在运行时将显示为空.
在设计时,如果愿意,也可以设置组合框的Text属性.
列表框也有Text属性,但只能在运行时才能进行设置.
第7章列表、循环和打印2837.
1.
1选项集合(ItemsCollection)显示在列表框和组合框里的选项列表是一个集合.
VB里的选项集合也是对象,这些对象同样具有属性和方法以允许添加和删除选项、引用单个元素、计算选项的数量,以及清除选项集合.
在随后的几节中,将学习如何操作和引用选项集合.
可以通过索引引用一个集合中的选项,索引是从0开始.
例如,集合有10项,则索引的选项范围是0~9.
而选项集合的第一项,用Items(0)表示.
7.
1.
2填写列表有多种方法可以填写列表框和组合框的选项集合.
如果在设计时能确定列表的内容,而且列表不需要改动,则可以在属性窗口中定义选项集合.
如果必须要在程序运行时向列表中添加选项,则需要在事件过程中使用Items.
Add或者Items.
Insert方法.
在第11章中,将学习用磁盘数据文件来填写列表.
这一方法允许列表的内容在某次运行中与另一次运行中有所不同.
1.
使用属性窗口Items属性是一个集合,它包括列表框和组合框的选项的列表.
如果要在设计时定义选项集合,则选择控件,然后滚动属性窗口找到Items属性(如图7-3所示).
单击省略号按钮打开字符串集合编辑器(StringCollectionEditor)(如图7-4所示),然后输入列表选项,这些选项每行都以回车键结束.
输入完成后单击OK按钮.
如果需要,还可以重新打开编辑器改变列表选项.
单击此处,打开字符串集合编辑器图7-3选择列表框的Items属性来输入列表选项VisualBasic2008程序设计(第7版)284图7-4在打开的字符串集合编辑器中输入每一个列表选项,按回车键进行下一行输入2.
使用Items.
Add方法在运行时,在列表中添加选项,可以使用Items.
Add方法.
在组合框的上部或者其他控件的Text属性中,可以选择添加变量、常量、或者文本框的内容.
Items.
Add方法——标准形式Object.
Items.
Add(ItemValue)ItemValue是一个在列表中添加的字符串值,如果这个值是一个字符串字面值,则需要将它用引号引起来.
新的选项通常是添加到列表的末尾.
但是,可以通过设置控件的Sorted属性为True去改变排序.
这样新的选项在列表中将会按照字母表顺序排列.
Items.
Add方法——示例SchoolsListBox.
Items.
Add("Harvard")SchoolsListBox.
Items.
Add("Stanford")SchoolsListBox.
Items.
Add(SchoolsTextBox.
Text)MajorsComboBox.
Items.
Add(MajorsComboBox.
Text)MajorsComboBox.
Items.
Add(MajorString)当用户在组合框的文本框部分输入一个新的值时,这个选项不会在列表中自动添加.
如果需要向列表中添加新输入的文本,可以使用Items.
Add方法:CoffeeComboBox.
Items.
Add(CoffeeComboBox.
Text)或者使用如下格式更好一些:WithCoffeeComboBox.
Items.
Add(.
Text)EndWith也可以在列表框中添加文本框的内容.
第7章列表、循环和打印285SchoolsListBox.
Items.
Add(SchoolTextBox.
Text)3.
使用Items.
Insert方法可以为在列表中添加的新选项选择位置.
在Items.
Insert方法中,可以为新的选项指定具体的索引位置.
Items.
Insert方法——标准形式Object.
Items.
Insert(IndexPosition,ItemValue)索引位置是从0开始的.
在第一个位置插入一个新的选项时,索引位置使用0.
Items.
Insert方法——示例SchoolsListBox.
Items.
Insert(0,"Harvard")MajorsComboBox.
Items.
Insert(1,MajorsComboBox.
Text)如果希望通过使用Insert方法选择一个选项的索引位置,则不能将此控件的Sorted属性设置为True.
不管请求的其他顺序是如何的,一个排序的列表通常是按照字母表顺序排列的.
7.
1.
3SelectedIndex属性当一个项目正在运行时,用户从列表中选择一个选项(高亮部分),这个选项的索引号被存储到列表框的SelectedIndex属性中.
重申一下,列表中第一个选项的索引是0.
如果没有列表项被选中,那么SelectedIndex的属性将被设置为–1.
可以使用SelectedIndex属性从列表中选择一个选项或者通过代码取消选中所有选项.
示例:'Selectthefourthiteminlist.
CoffeeTypesListBox.
SelectedIndex=3'Deselectallitemsinlist.
CoffeeTypesListBox.
SelectedIndex=(R)C7.
1.
4Items.
Count属性可以使用选项集合中的Count属性统计列表中的选项数目.
在本章的随后内容中,将会学习如何使用Items.
Count属性处理列表中的每一个元素.
当需要显示项目中的选项个数时,使用Items.
Count属性是比较方便的.
记住:Items.
Count始终比最大的SelectIndex大1,因为索引是从0开始的.
例如,在列表中有5个选项,那么Items.
Count将会是5,而最大的索引是4(如图7-5所示).
VisualBasic2008程序设计(第7版)286图7-5列表中有5个选项,索引范围从0到4示例TotalItemsInteger=ItemsListBox.
Items.
CountMessageBox.
Show("Thenumberofitemsinthelistis"&_ItemsListBox.
Items.
Count.
ToString())7.
1.
5引用选项集合如果需要显示列表中的一个选项,可以引用选项集合的一个元素.
列表框和组合框的选项集合包含所有列表元素的文本内容.
可以通过索引指定元素.
如果需要在标签中或在另一个窗体中显示列表项,这一方法是非常有用的.
在本章随后的内容中,会使用Items属性将列表框的内容发送到打印机.
1.
使用选项集合——标准形式Object.
Items(IndexPosition)[=Value]第一个列表元素的索引值为0,所以最大的索引值为Item.
Count–1.
注意:如果使用的IndexPosition小于0或者大于Items.
Count–1,将会抛出一个异常.
可以检索列表元素的值或者为列表元素设置新值.
2.
使用选项集合——示例SchoolsListBox.
Items(5)="UniversityofCalifornia"MajorLabel.
Text=MajorsComboBox.
Items(IndexInteger)SelectedMajorLabel.
Text=MajorsComboBox.
Items(MajorsComboBox.
SelectedIndex)SelectedMajorLabel.
Text=MajorsComboBox.
Text要引用列表中当前选择的元素,必须同时使用Items属性和SelectedIndex属性:SelectedFlavorString=_FlavorListBox.
Items(FlavorListBox.
SelectedIndex).
ToString()也能通过引用控件的Text属性来检索选中的列表项:SelectedMajorLabel.
Text=MajorsComboBox.
Text第7章列表、循环和打印287注意:如果给特定的选项赋予值,会替换掉该位置先前的内容.
例如:SchoolsListBox.
Items(0)="MySchool"把MySchool放置在第一个位置,将替换掉先前的内容.
这不会将此选项插入到列表中,也不会增加Items.
Count的值.
7.
1.
6从列表中删除选项可以通过指定选项的索引或者选项的内容从列表中删除单个选项.
使用Items.
RemoveAt方法可以通过索引删除选项,使用Items.
Remove方法可以通过指定选项内容删除选项.
Items.
RemoveAt方法——标准形式Object.
Items.
RemoveAt(IndexPosition)索引是必须的,它可以指定要删除的元素.
列表的第一个元素的索引为0,最后一个元素的索引为Item.
Count–1.
如果指定的索引无效,系统会抛出IndexOutOfRange异常.
Items.
RemoveAt方法——示例'Removethefirstnamefromthelist.
NamesListBox.
Items.
RemoveAt(0)'RemovetheiteminpositionIndexInteger.
SchoolsComboBox.
Items.
RemoveAt(IndexInteger)'Removethecurrentlyselecteditem.
CoffeeComboBox.
Items.
RemoveAt(CoffeeComboBox.
SelectedIndex)Items.
Remove方法——标准形式Object.
Items.
Remove(TextString)Items.
Remove方法会在选项集合中寻找指定的字符串.
如果找到字符串,则删除选项;如果没有找到,也不会有异常发生.
Items.
Remove方法——示例'Removethespecifieditem.
NamesListBox.
Items.
Remove("MySchool")'Removethematchingitem.
SchoolsComboBox.
Items.
Remove(SchoolTextBox.
Text)'Removethecurrentlyselecteditem.
CoffeeComboBox.
Items.
Remove(CoffeeComboBox.
Text)如果删除当前选择项,使用RemoveAt或Remove方法都可以.
为了让代码更高效和更容易阅读,可以使用With语句.
WithCoffeeComboBoxVisualBasic2008程序设计(第7版)288If.
SelectedIndex–1The.
Items.
RemoveAt(.
SelectedIndex)'RemovebyIndex.
'.
Items.
Remove(.
Text)'Alternate–removebyText.
ElseMessageBox.
Show("Firstselectthecoffeetoremove.
","NoSelectionMade",_MessageBoxButtons.
OK,MessageBoxIcon.
Exclamation)EndIfEndWith7.
1.
7清空列表除了在运行时删除单个列表选项之外,也可以清空列表的所有选项.
使用Items.
Clear方法清空组合框或者列表框.
Items.
Clear方法——标准形式Object.
Items.
Clear()Items.
Clear方法——示例SchoolsListBox.
Items.
Clear()MajorsComboBox.
Items.
Clear()'Confirmclearingthemajorslist.
DimResponseDialogResultAsDialogResultResponseDialogResult=MessageBox.
Show("Clearthemajorslist","Clear_MajorsList",MessageBoxButtons.
YesNo,MessageBoxIcon.
Question)IfResponseDialogResult=DialogResult.
YesThenMajorsComboBox.
Items.
Clear()EndIf7.
1.
8列表框和组合框的事件在本章的随后内容中,将学习列表框和组合框的事件过程.
一些实用的事件是SelectedIndexChanged、TextChanged、Enter以及Leave.
注意:虽然直到此时我们才使用这些事件,但很多其他控件都有类似的事件.
例如,可以为文本框的Enter、Leave以及TextChanged事件编写事件过程代码.
1.
TextChanged事件当用户在组合框的文本框位置中输入文本时,就触发TextChanged事件.
每一次击键过程都会生成另一个TextChanged事件.
第7章列表、循环和打印2892.
Enter事件当控件获得焦点时,Enter事件被触发.
当用户用Tab键从一个控件切换到另一个控件时,每个控件都会触发Enter事件.
随后将学习使用Tab键选择文本框或组合框的文本部分时,这两类控件中包含的文本将会被选中.
3.
Leave事件也可以对控件的Leave事件编写代码.
用户用Tab键从一个控件切换到另一个控件,当控件失去焦点时Leave事件被触发,而且是发生在下一个控件的Enter事件之前.
编程人员通常用Leave事件过程验证输入数据的有效性.
提示:要对一个控件的非默认事件编写过程代码时,不能直接双击这个控件.
取而代之的是,需要在属性窗口中,单击事件按钮,然后双击事件名,编辑器将会自动生成这个事件过程的头部.
练习7.
1描述下列列表框控件或者组合框控件的方法和属性有什么作用.
1.
Sorted2.
SelectedIndex3.
Items4.
DropDownStyle5.
Items.
Count6.
Items.
Add7.
Items.
Insert8.
Items.
Clear9.
Items.
RemoveAt10.
Items.
Remove7.
2Do/Loop到目前为止,除了二次调用以外,还没有别的方法可以在一个过程中重复执行同样的步骤.
计算机可以多次重复执行一组指令,而不必对每组新数据都调用过程.
重复执行一系列指令的过程叫作循环过程(looping).
这一组重复执行的指令叫作循环体(loop).
一次迭代是表示循环中的语句执行一次.
在本节中,将学习Do/Loop语句.
本章的后面,还将学习到另一种循环语句:For/Next循环.
Do/Loop循环是在指定条件下结束循环的.
当while条件是True时,Do/Loop循环继续执行;或者Do/Loop循环一直执行,直到until条件是True时.
可以选择将条件放在循环的顶部或底部.
VisualBasic2008程序设计(第7版)290对齐Do和Loop语句后,把需要重复执行的代码行以缩进格式放在Do和Loop之间.
Do/Loop语句——标准形式Do{While|Until}Condition'Statementsinloop.
Loop或者Do'Statementsinloop.
Loop{While|Until}ConditionDo/Loop循环的第一个表达形式是在循环头部完成测试.
这种循环方式称为前期测试或者入口测试,如果第一次测试终止条件为True,则循环中的语句不会被执行.
示例:TotalInteger=0DoUntilTotalInteger=0'Thesestatementsinloopwillneverexecute.
Loop因为变量TotalInteger在第一次测试条件时是0,所以条件为True,因此循环里的语句将不被执行.
控制将跳到Loop语句下面的语句去执行.
Do/Loop循环的第二个形式是在循环的底部完成测试,也就是说循环里的语句将最少被执行一次.
这种循环通常叫作后期测试或者退出测试.
将上面例子的测试条件改成后期测试,将会明白它们的不同之处.
TotalInteger=0Do'StatementsinLoopwillexecuteatleastonce.
LoopUntilTotalInteger=0在这个例子中,循环中的语句将最少被执行一次.
假设变量TotalInteger的值在循环中不变,第一次被测试的时候条件(TotalInteger=0)为True,控制将跳到Loop语句下的第一条语句.
图7-6显示了同时使用了While和Until语句的前期测试和后期测试的统一建模语言(UML)活动图.
第7章列表、循环和打印291前期测试DoWhile入口测试前期测试DoUntil入口测试[循环条件为False][循环条件为True][循环条件为True][循环条件为False]Loop中的语句Loop中的语句Loop中的语句Loop中的语句[循环条件为False][循环条件为True][循环条件为True][循环条件为False]循环结束循环结束后期测试LoopWhile退出测试后期测试LoopUntil退出测试循环结束循环结束图7-6前期测试循环方式和后期测试循环方式的UML活动图Do/Loop语句——示例DoUntilItemIndexInteger=ItemsListBox.
Items.
Count–1'Statementsinloop.
LoopDoWhileAmountDecimal>=10DAndAmountDecimal1000ThenExitForEndIf'Statementsinloop.
第7章列表、循环和打印297NextIndexIntegerDoUntilItemIndexInteger=ItemsListBox.
Items.
CountIfNewItemTextBox.
Text=_ItemsListBox.
Items(ItemIndexInteger).
ToString()ThenItemFoundBoolean=TrueExitDoElseItemIndexInteger+=1EndIfLoop7.
3.
6跳到下一次循环有时需要结束当前的循环,然后跳到下一次循环.
这时可以使用Continue语句,Continue语句将控制权转移到循环的最后一条语句,并重新测定循环的退出条件,这实际上跳到下一次循环.
通常,Continue语句也是If语句的一部分.
1.
Continue语句——标准形式ContinueForContinueDo2.
Continue语句——示例ForLoopIntegerAsInteger=0ToNameListBox.
Items.
Count–1IfNameListBox.
Items(LoopInteger).
ToString()=String.
EmptyThenContinueForEndIf'Codetodosomethingwiththenamefound.
Debug.
WriteLine("Name="&NameListBox.
Items(LoopInteger).
ToString())NextLoopInteger=–1DoUntilLoopInteger=NameListBox.
Items.
Count–1LoopInteger+=1IfNameListBox.
Items(LoopInteger).
ToString()=String.
EmptyThenContinueDoEndIf'Codetodosomethingwiththenamefound.
Debug.
WriteLine("Name="&NameListBox.
Items(LoopInteger).
ToString())Loop注意:以上两个例子实现的功能是一样的,但是您会注意到For循环使用的代码更少.
因为循环的次数已经确定(Items.
Count),所以使用For语句更胜一筹.
练习7.
31.
下面这些语句中哪些正确哪些不正确.
对于不正确的语句,陈述错在哪里,并说明VisualBasic2008程序设计(第7版)298如何纠正这些错误.
(a)ForIndexDecimal=3.
5DTo6.
0D,Step0.
5DNextIndexDecimal(b)ForIndexInteger=BeginIntegerToEndIntegerStepIncrementIntegerNextEndInteger(c)For4=1To10Step2NextFor(d)ForIndexInteger=100To0Step–2NextIndexInteger(e)ForIndexInteger=0To–10Step–1NextIndexInteger(f)ForIndexInteger=10To1NextIndexInteger2.
下面每一个例子中的循环体分别执行多少次每一个循环正常完成后,循环索引的值分别是多少(a)ForCountInteger=1To3(b)ForCountInteger=2To11Step3(c)ForCountInteger=10To1Step–1(d)ForCounterDecimal=3.
0DTo6.
0DStep0.
5D(e)ForCountInteger=5To17.
4使条目显示为被选中有几种方法可以使文本框或列表中的文本显示为被选中.
7.
4.
1选择文本框中的条目当用户用Tab键选中一个已经有条目的文本框时,文本应该如何显示呢光标应该放在文本的左边还是右边呢是否应该使整个条目都显示为被选中这一问题也适用于有效性验证失败的文本框:难道不应该显示为选中整个条目吗对用户而言,处理这个问题最好的方式是使用文本框的SelectAll方法来选择文本.
在文本框的Enter事件过程中完成这一任务比较合适,当控件被选中时,将触发Enter事件.
PrivateSubNameTextBox_Enter(ByValsenderAsObject,_ByValeAsSystem.
EventArgs)HandlesNameTextBox.
Enter'Selectanyexistingtext.
NameTextBox.
SelectAll()EndSub7.
4.
2选择列表框中的条目可以设置SelectedIndex属性,让列表框中的某一项显示时被选中.
CoffeeListBox.
SelectedIndex=IndexInteger第7章列表、循环和打印299当列表框的条目非常多时,可以根据用户输入到文本框的文本找到对应的条目.
这类似于HelpTopics列表在VB中的工作方式.
例如,当输入p时,列表快速滚动,并显示以p字母开头的单词.
然后接着输入r,列表向下滚动到以pr字母开头的单词,并且第一个这样的单词被选中.
继续输入i,则第一个以pri开头的单词被选中.
下面的例子就表现了这种特性.
解释每条语句的作用.
注意:这些代码是用户正在输入内容的控件的TextChanged事件过程中编写的.
每一次击键输入时触发这个事件.
PrivateSubCoffeeTextBox_TextChanged(ByValsenderAsSystem.
Object,_ByValeAsSystem.
EventArgs)HandlesCoffeeTextBox.
TextChanged'Locatefirstmatchingoccurrenceinthelist.
DimIndexIntegerAsInteger=0DimFoundBooleanAsBoolean=FalseDimListCompareStringAsStringDimTextCompareStringAsStringDoWhileNotFoundBooleanAndIndexInteger=e.
MarginBounds.
Bottom'Incrementthepagenumber.
PageCountInteger+=1'Indicatewhethertherearemorepagestoprint.
IfPageCountInteger""Then'Makesureitemisnotalreadyonthelist.
DimItemFoundBooleanAsBooleanDimItemIndexIntegerAsIntegerDoUntilItemFoundBooleanOrItemIndexInteger=.
Items.
CountIf.
Text=.
Items(ItemIndexInteger).
ToString()ThenItemFoundBoolean=TrueExitDoElseItemIndexInteger+=1EndIfLoopIfItemFoundBooleanThenMessageBox.
Show("Duplicateitem.
","AddFailed",_MessageBoxButtons.
OK,MessageBoxIcon.
Exclamation)Else'Ifit'snotinthelist,addit.
.
Items.
Add(.
Text).
Text=""EndIfElseMessageBox.
Show("Enteracoffeeflavortoadd",_"MissingData",MessageBoxButtons.
OK,_MessageBoxIcon.
Exclamation)EndIf.
Focus()EndWithEndSubPrivateSubPrintAllToolStripMenuItem_Click(ByValsenderAs_System.
Object,ByValeAsSystem.
EventArgs)_HandlesPrintAllToolStripMenuItem.
Click'Begintheprintprocesstoprintallitems.
VisualBasic2008程序设计(第7版)314PrintAllPrintDocument.
Print()EndSubPrivateSubPreviewAllToolStripMenuItem_Click(ByValsenderAsObject,_ByValeAsSystem.
EventArgs)Handles_PreviewAllToolStripMenuItem.
Click'Begintheprocessforprintpreviewofallitems.
PrintPreviewDialog1.
Document=PrintAllPrintDocumentPrintPreviewDialog1.
ShowDialog()EndSubPrivateSubPrintSelectedToolStripMenuItem1_Click(ByValsenderAsSystem.
Object,ByValeAsSystem.
EventArgs)_HandlesPrintSelectedToolStripMenuItem1.
Click'Begintheprintprocesstoprinttheselecteditem.
IfSyrupListBox.
SelectedIndex=–1Then'Select(None)ifnothingselected.
SyrupListBox.
SelectedIndex=0EndIfIfCoffeeComboBox.
SelectedIndex–1Then'Itemsselected.
PrintSelectedPrintDocument.
Print()Else'Noitemselected.
MessageBox.
Show("Selectaflavorfromthecoffeelist",_"PrintSelection",MessageBoxButtons.
OK,_MessageBoxIcon.
Exclamation)EndIfEndSubPrivateSubPreviewSelectedToolStripMenuItem1_Click(ByValsenderAsObject,ByValeAsSystem.
EventArgs)Handles_PreviewSelectedToolStripMenuItem1.
Click'Begintheprocessforprintpreviewoftheselecteditem.
IfSyrupListBox.
SelectedIndex=–1Then'Select(None)ifnothingselected.
SyrupListBox.
SelectedIndex=0EndIfIfCoffeeComboBox.
SelectedIndex–1Then'Itemselected.
PrintPreviewDialog1.
Document=PrintSelectedPrintDocumentPrintPreviewDialog1.
ShowDialog()Else'Noitemselected.
MessageBox.
Show("Selectaflavorfromthecoffeelist.
",_"PrintSelection",_第7章列表、循环和打印315MessageBoxButtons.
OK,MessageBoxIcon.
Exclamation)EndIfEndSubPrivateSubPrintAllPrintDocument_PrintPage(ByValsenderAsObject,_ByValeAsSystem.
Drawing.
Printing.
PrintPageEventArgs)_HandlesPrintAllPrintDocument.
PrintPage'Handleprintingandprintpreviewswhenprintingall.
DimPrintFontAsNewFont("Arial",12)DimLineHeightSingleAsSingle=PrintFont.
GetHeight+2DimHorizontalPrintLocationSingleAsSingle=e.
MarginBounds.
LeftDimVerticalPrintLocationSingleAsSingle=e.
MarginBounds.
TopDimPrintLineStringAsString'Printtheheading.
UsingHeadingFontAsNewFont("Arial",14,FontStyle.
Bold)e.
Graphics.
DrawString("Flavors",HeadingFont,_Brushes.
Black,HorizontalPrintLocationSingle,_VerticalPrintLocationSingle)EndUsing'Loopthroughtheentirelist.
ForListIndexIntegerAsInteger=0ToCoffeeComboBox.
Items.
Count–1'IncrementtheYpositionforthenextline.
VerticalPrintLocationSingle+=LineHeightSingle'Setupaline.
PrintLineString=CoffeeComboBox.
Items_(ListIndexInteger).
ToString()'Sendthelinetothegraphicspageobject.
e.
Graphics.
DrawString(PrintLineString,PrintFont,_Brushes.
Black,HorizontalPrintLocationSingle,_VerticalPrintLocationSingle)NextListIndexIntegerEndSubPrivateSubPrintSelectedPrintDocument_PrintPage(ByValsenderAsSystem.
Object,ByValeAs_System.
Drawing.
Printing.
PrintPageEventArgs)_HandlesPrintSelectedPrintDocument.
PrintPage'Handleprintingandprintpreviewswhenprintingselecteditems.
DimPrintFontAsNewFont("Arial",12)DimHeadingFontAsNewFont("Arial",14,FontStyle.
Bold)DimLineHeightSingleAsSingle=PrintFont.
GetHeight+2DimHorizontalPrintLocationSingleAsSingle=e.
MarginBounds.
LeftDimVerticalPrintLocationSingleAsSingle=e.
MarginBounds.
TopDimPrintLineStringAsString'Setupanddisplayheadinglines.
VisualBasic2008程序设计(第7版)316PrintLineString="PrintSelectedItem"e.
Graphics.
DrawString(PrintLineString,HeadingFont,_Brushes.
Black,HorizontalPrintLocationSingle,_VerticalPrintLocationSingle)PrintLineString="byProgrammerName"VerticalPrintLocationSingle+=LineHeightSinglee.
Graphics.
DrawString(PrintLineString,HeadingFont,_Brushes.
Black,HorizontalPrintLocationSingle,_VerticalPrintLocationSingle)'Leaveablanklinebetweentheheadinganddetailline.
VerticalPrintLocationSingle+=LineHeightSingle*2'Setuptheselectedline.
PrintLineString="Coffee:"&CoffeeComboBox.
Text&_"Syrup:"&SyrupListBox.
Text'Sendthelinetothegraphicspageobject.
e.
Graphics.
DrawString(PrintLineString,PrintFont,_Brushes.
Black,HorizontalPrintLocationSingle,_VerticalPrintLocationSingle)EndSubPrivateSubClearCoffeeListToolStripMenuItem_Click(ByValsenderAsObject,ByValeAsSystem.
EventArgs)Handles_ClearCoffeeListToolStripMenuItem.
Click'Clearthecoffeelist.
DimResponseDialogResultAsDialogResultResponseDialogResult=MessageBox.
Show("Clearthecoffeeflavorlist",_"Clearcoffeelist",MessageBoxButtons.
YesNo,_MessageBoxIcon.
Question)IfResponseDialogResult=DialogResult.
YesThenCoffeeComboBox.
Items.
Clear()EndIfEndSubPrivateSubRemoveCoffeeFlavorToolStripMenuItem_Click(ByValsenderAsObject,ByValeAsSystem.
EventArgs)Handles_RemoveCoffeeFlavorToolStripMenuItem.
Click'Removetheselectedcoffeefromlist.
WithCoffeeComboBoxIf.
SelectedIndex–1Then.
Items.
RemoveAt(.
SelectedIndex)ElseMessageBox.
Show("Firstselectthecoffeetoremove",_"Noselectionmade",MessageBoxButtons.
OK,_MessageBoxIcon.
Exclamation)EndIfEndWithEndSubPrivateSubDisplayCoffeeCountToolStripMenuItem_Click(ByValsenderAs_第7章列表、循环和打印317Object,ByValeAsSystem.
EventArgs)_HandlesDisplayCoffeeCountToolStripMenuItem.
Click'Displayacountofthecoffeelist.
DimMessageStringAsStringMessageString="Thenumberofcoffeetypesis"&_CoffeeComboBox.
Items.
Count&".
"MessageBox.
Show(MessageString,"R'nRCoffeeTypeCount",_MessageBoxButtons.
OK,MessageBoxIcon.
Information)EndSubPrivateSubAboutToolStripMenuItem_Click(ByValsenderAsObject,_ByValeAsSystem.
EventArgs)HandlesAboutToolStripMenuItem.
Click'DisplaytheAboutform.
AboutForm.
ShowDialog()EndSubEndClassAbout窗体'Class:AboutForm'Programmer:Bradley/Millspaugh'Date:June2008'Description:Displayinformationabouttheprogram'andtheprogrammer.
'Folder:Ch07HandsOnPublicClassAboutFormPrivateSubOkButton_Click(ByValsenderAsSystem.
Object,_ByValeAsSystem.
EventArgs)HandlesOkButton.
Click'Closetheform.
Me.
Close()EndSubEndClass7.
7本章小结1.
列表框和组合框中存放值的列表.
组合框有三种风格,分别是:简单组合框、下拉组合框以及下拉列表框.
2.
在设计时,可以调整列表框和组合框的大小.
如果列表中的条目不能完全显示出来,VB会自动添加一个滚动条.
3.
列表项的值都被存储在Items属性的选项集合中.
通过属性窗口可以在Items属性中输入选项.
在运行时,通过使用Items.
Add或者Items.
Insert方法可以在列表中添加选项.
4.
使用SelectedIndex属性可以选择列表中的选项,或者确定哪个选项被选中.
VisualBasic2008程序设计(第7版)3185.
Items.
Count属性记录列表中元素的个数.
6.
在选项集合中记录所有的列表元素.
单个的元素可以通过索引引用.
7.
Items.
Remove和Items.
RemoveAt方法可以删除列表中的一个元素.
8.
Items.
Clear方法可以一次性清空列表框选项集合的所有元素.
9.
可以在列表框和组合框的事件中编写代码.
组合框中有一个TextChanged事件.
列表框和组合框都有Enter和Leave事件.
10.
循环可以使一条语句或一系列语句被多次执行.
在Do/Loop循环中,直到循环条件满足后,循环才会结束.
每次执行完一次循环叫作一次迭代.
11.
Do/Loop可以将条件放置在循环的顶部或者底部,使用While和Until关键字来验证是否满足条件.
12.
Do/Loop可以用来定位组合框中被选中的项.
13.
循环索引控制For/Next循环,首先用初始值来初始化循环索引.
每一次迭代后,这个索引要累加Step的值(循环增量),默认为1,当索引值大于最终值时,循环结束.
14.
PrintDocument和PrintPreviewDialog组件可以把程序输出结果发送到打印机或屏幕上.
15.
PrintDialog控件的Print方法开始一个打印操作.
对于要打印的每一页,控件的PrintPage事件会被激发一次.
所有的打印逻辑都是在PringPage事件过程中.
当PrintDocument组件的HasMorePages属性设置为True时,PrintPage事件可以连续打印输出.
16.
要打印和显示的页面是一个图形对象.
用DrawString方法通过指定一个文本字符串的X和Y的坐标值,可以将这个字符串发送到页面上.
17.
不同的字体对于数值列的对齐是非常麻烦的.
格式化后的数值采用右对齐的方式,格式化的字符串长度用像素来表示,并用X坐标值表示(列的右端值减去字符串长度).
7.
8复习题1.
什么是列表框什么是组合框2.
命名和描述三种风格的组合框.
3.
如何在列表框和组合框中显示滚动条4.
解释一下SelectedIndex属性和Items.
Count属性的作用5.
什么时候将消息放置到列表框和组合框中如何放置6.
在什么样的情况下可以在过程中使用循环结构7.
解释一下Do/Loop的前期测试和后期测试的区别8.
解释一下Do/Loop循环和For/Next循环的区别9.
处理一个For/Next循环时的步骤是什么10.
讨论在循环处理的整个过程中,循环索引的值是如何改变以及何时改变第7章列表、循环和打印31911.
PrintDocument组件的作用是什么PrintPreviewDialog组件的作用是什么12.
在哪个过程中编写逻辑代码,将输出结果发送到打印机13.
打印页面中的X和Y坐标值的作用是什么7.
9编程练习7.
1创建一个获取学生信息的项目.
启动窗体中的控件包含如下:文本框用来输入姓名和取得的学分;单选按钮分别表示Freshman(大学一年级)、Sophomore(大学二年级)、Junior(大学三年级)以及Senior(大学四年级).
复选框用来表示Dean的列表.
列表框包含如下专业:Accounting、Business、ComputerInformationSystems以及Marketing.
简单组合框用来表示高校的名称——初始化为Franklin、Highland、WestHighland以及Midtown.
如果用户输入一个新的学校名称,它可以添加到列表中.
Print按钮用来打印此窗体的数据.
可以使用打印预览对话框.
OK按钮用来清除窗体中输入的内容,并重置焦点.
这个按钮应该设置为窗体的Accept按钮.
菜单项:File菜单中包含PrintSchools和Exit菜单项.
Edit菜单中包含AddHighSchool菜单项;Help菜单中包含一个About菜单项,单击此菜单项可以显示About对话框.
注意:在打印输出的学校的上面位置打印您的姓名.
在打印预览对话框中显示打印输出.
7.
2R'nR(Reading'nRefreshment)需要一个项目,项目包含一个窗体,用来输入图书信息.
窗体控件:文本框分别用于输入作者和书名.
单选按钮表示类型:小说类或者非小说类.
Subject的下拉式列表,包含:Best-Seller、Fantasy、Religion、Romance、Humor、ScienceFiction、Business、Philosophy、Education、Self-Help以及Mystery.
ShelfNumber列表框包含:RC-1111、RC-1112、RC-1113以及RC-1114.
Print按钮用来打印窗体中的数据,允许使用打印预览对话框.
OK按钮用来清除窗体中输入的内容,并重置焦点.
这个按钮应该设置为窗体中的Accept按钮.
VisualBasic2008程序设计(第7版)320菜单项:File菜单中包含PrintSubjects和Exit菜单项.
Help菜单中包含About菜单项,单击此菜单项可以显示About对话框.
注意:在打印输出的学科的上面位置打印您的姓名.
在打印预览对话框中显示打印输出.
7.
3创建一个游艇管理项目,输入租用信息,然后打印一个关于总收入、租用数量、每次租用的平均小时数的汇总报表.
菜单项:File菜单中包含PrintSummary、PrintYachtTypes以及Exit菜单项.
在Exit菜单项上面添加一个分隔符.
Edit菜单中包含ClearforNextCharter、AddYachtType、RemoveYachtType以及DisplayCountofYachtTypes菜单项,在Clear菜单项后包含一个分隔符.
Help菜单中包含About菜单项,单击此菜单项可以显示About对话框.
窗体控件:窗体中包含文本框分别用于责任方、租用的小时数以及计算租金的总额.
一个下拉组合框包含游艇的类型,主要有:Ranger、Wavelength、Catalina、Coronado、Hobie、C&C、HansChristian以及Excalibur.
所有在文本框中添加的新类型也可以添加到列表中.
一个下拉式列表框包含尺寸,主要有:22、24、30、32、36、38、45.
(运行时不能输入新的尺寸值).
OK按钮用于计算和显示价格,然后添加到总金额中.
计算需要使用每小时的租用价格,如表7-5所示.
表7-5尺寸和每小时租金尺寸每小时租金2295.
0024137.
0030160.
0032192.
0036250.
0038400.
0045550.
00Clear按钮用于清除屏幕上的各种输入内容.
Clear按钮的功能和菜单项ClearforNextCharter的功能一样.
将OK按钮设置为Accept按钮,将Clear按钮设置为窗体的Cancel按钮.
第7章列表、循环和打印321汇总报表:汇总报表将会打印汇总信息,还可以发送报表到打印预览对话框中.
汇总信息包含如下内容:NumberofCharters(租用数量)、TotalRevenue(总收入)以及AverageHoursChartered(平均租用时间).
在汇总信息的输出和标识标签上显示您的名字.
游艇类型报表在打印预览对话框中的组合框中显示游艇类型.
在报表顶部显示您的名字和一个合适的标题.
7.
4创建一个项目包含一个列表框,列表框的内容为美国所有的州和准州的名称(参见表7-6).
当用户在文本框中键入州的首字母时,设置列表框的SelectedIndex属性,显示最相近的州的名称.
项目还包含一个Exit菜单项.
表7-6美国的州和准州AlabamaKentuckyOklahomaAlaskaLouisianaOregonAmericanSamoaMainePennsylvaniaArizonaMarylandPuertoRicoArkansasMassachusettsRhodeIslandCaliforniaMichiganSouthCarolinaColoradoMinnesotaSouthDakotaConnecticutMississippiTennesseeDelawareMissouriTexasDistrictofColumbiaMontanaTrustTerritoriesFloridaNebraskaUtahGeorgiaNevadaVermontGuamNewHampshireVirginIslandsHawaiiNewJerseyVirginiaIdahoNewMexicoWashingtonIllinoisNewYorkWestVirginiaIndianaNorthCarolinaWisconsinIowaNorthDakotaWyomingKansasOhio7.
5创建一个关于BradleyBagel(百吉饼)的列表,包含各种百吉饼的类型.
使用一个下拉组合框获得百吉饼的类型,使用如下按钮或菜单选项:AddBagelType、RemoveBagelType、ClearBagelList、PrintBagelList、DisplayBagelTypeCount以及Exit.
整个列表按字母表顺序排序.
不允许在列表中添加一个空白类型.
如果用户在没有先选中一个百吉饼类型的情况下VisualBasic2008程序设计(第7版)322选择RemoveBagelType按钮或菜单项时,则显示一个错误信息提示.
清空列表前,需要显示一个消息对话框来确认这个操作.
表7-7提供了一些百吉饼类型.
可以按照自己的想法创建列表.
表7-7百吉饼类型PlainPoppyseedEggSesameseedRyeBanananutSaltBlueberry7.
6修改编程练习7.
5,不允许在列表中重复添加百吉饼类型.
7.
10案例分析VBMailOrder为VBMailOrder创建一个项目,用于管理一个目录列表.
将下拉式组合框用于目录名,允许用户添加目录名、删除目录名、显示目录数量的统计、清除目录列表或打印目录列表.
不允许在列表中添加一个空的目录名.
如果用户没有先选中一个目录名而选择Remove时,将显示一个错误信息提示.
清空列表前,需要显示一个消息对话框来确认这个操作.
开始时,目录列表可以包含这些分类名称:OddsandEnds、Solutions、CampingNeeds、ToolTime、Spiegel、TheOutlet以及TheLargeSize.
在打印预览对话框中显示打印的输出.
在报表顶部显示您的姓名和一个合适的标题.
VBAutoCenter为VBAutoCenter洗车处创建一个应用程序.
这个窗体包括三个列表框或者组合框控件,这些控件不允许用户在运行时输入条目.
第一个列表包含用于描述汽车包装细节的名称:Standard、Deluxe、Executive或Luxury.
另两个列表的内容随着选择的包装不同而变化.
一个列表显示内部的工作,另一个列表显示外部的工作.
在字符型常量中存放条目的描述.
必须清除每一个订单的内部和外部工作列表,并且每一次用户在包装列表中选择时,在列表中添加新的条目.
使用一个下拉式列表允许用户选择汽车香味.
这些选择可以包括:HawaiianMist、BabyPowder、Pine、CountryFloral、PinaColada以及Vanilla.
包含对应快捷键的菜单选项:PrintOrder、Clear、Exit.
打印选项可以发送输出结果到打印预览窗口.
在报表顶部显示您的姓名和一个合适的标题.
订单打印输出应该包含包装的名称(Standard、Deluxe、Executive或Luxury)、内部和外部工作的选项以及香味的选择(参见表7-8).
在打印内部和外部的工作列表时,可以使用For/Next循环.
第7章列表、循环和打印323表7-8汽车包装相关类别的外部和内部工作条目描述SDEL外部HandWash√√√√HandWax√√√CheckEngineFluids√√DetailEngineCompartment√DetailUndercarriage√内部Fragrance√√√√ShampooCarpets√√√ShampooUpholstery√InteriorProtectionCoat(dashboardandconsole)√ScotchgardTM√注:S——Standard;D——Deluxe;E——Executive;L——LuxuryVideoBonanza管理一个电影类型列表.
使用一个下拉组合框获得电影类型,整个列表按字母表顺序排序.
使用按钮和菜单选项,包含:AddaCategory、RemoveaCategory、ClearAllCategories、PrinttheCategoryList、DisplaytheMovieCategoryCount以及Exit.
在窗体和菜单项上都有对应的快捷键.
不允许在列表中添加一个空的电影类型.
如果用户没有先选中一个电影类型而选择RemoveaCategory时,则显示一个错误信息提示.
清空列表前,需要显示一个消息对话框来确认这个操作.
开始时的电影类型包括:Comedy、Drama、Action、Sci-Fi以及Horror.
在打印预览对话框中显示打印的输出.
在报表顶部显示您的姓名和一个合适的标题.
VeryVeryBoards编写一个项目用于管理一个衬衫样式列表.
把这些样式保存在一个下拉式组合框里,这些样式有:Crew、Turtleneck以及croptop.
在Style菜单中添加如下选项:AddStyle、RemoveStyle、ClearStyleList以及CountStyles.
在File菜单中添加一个PrintStyleList选项,菜单选项包含对应的快捷键.
在打印预览对话框中显示打印的输出.
在报表顶部显示您的姓名和一个合适的标题.
LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...
今天中午的时候有网友联系到在选择网站域名建站和主机的时候问到域名和IP地址有没有关联,或者需要注意的问题。毕竟我们在需要建站的时候,我们需要选择网站域名和主机,而主机有虚拟主机,包括共享和独立IP,同时还有云服务器、独立服务器、站群服务器等形式。通过这篇文章,简单的梳理关于网站域名和IP之间的关系。第一、什么是域名所谓网站域名,就是我们看到的类似"www.laozuo.org",我们可以通过直接记...
imidc对日本独立服务器在搞特别促销,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制流量。注意,本次促销只有一个链接,有2个不同的优惠码,你用不同的优惠码就对应着不同的配置,价格也不一样。88美元的机器,下单后默认不管就给512G SSD,要指定用HDD那就发工单,如果需要多加一个/28(13个)IPv4,每个月32美元...官方网站:https:...
正在跳转电影空间为你推荐
申请snsmediawikimediawiki的乱码问题全国企业信息查询有没有可以查全国企业信息的工商查询网站泉州商标注册泉州注册一个商标具体要怎么弄?具体流程是什么?12306.com如何登录12306闪拍网闪拍网之类的网站怎么回事?tumblr上不去我家里的网络打不开个别网站123456hdAPP上面带有HD是啥意思温州都市报招聘劳务市场找工作可靠吗400电话查询400电话。如何查询真伪,费用?
php主机租用 如何查询域名备案号 80vps 联通c套餐 t楼 wavecom sugarsync omnis 优惠码 patcha 南昌服务器托管 国外免费全能空间 网站卫士 国外代理服务器地址 网络空间租赁 重庆双线服务器托管 vip域名 电信主机 免费私人服务器 彩虹云 更多