标题:《VB6中文版程序员指南》书上的代码咋运行不了,请高手回答。
取消只看楼主
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
结帖率:100%
 问题点数:0 回复次数:5 
《VB6中文版程序员指南》书上的代码咋运行不了,请高手回答。
以下两个均有问题,请高手指点!先谢!

259页:

Private Sub Form_Click()
Dim SFont, PFont
For Each SFont In Screen.Fonts()
For Each PFont In Printer.Fonts()
If SFont = PFont Then
Print SFont
Exit For '退出内圈循环。
End If
Next PFont
Next SFont
End Sub



260页:

Private Sub Form_Click()
Dim SFont, PFont
For Each SFont In Screen.Fonts()
For Each PFont In Printer.Fonts()

If SFont = PFont Then
Print SFont
Exit Sub '退出过程。
End If
Next PFont
Next SFont
End Sub
搜索更多相关主题的帖子: 代码 中文版 指南 程序员 
2009-11-23 15:47
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
得分:0 
我是在VB6中运行的。
2009-11-23 15:53
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
得分:0 
请记住使用 For Each...Next 时的几点限制:

  1.对集合,element 只能是 Variant 变量,或一般的 Object 变量,或“对象浏览器”中列出的对象。

  2.对数组,element 只能是 Variant 变量。

  3.For Each...Next 不能与用户自定义类型的数组一起使用,因为 Variant 不可能包含用户自定义类型。

  使用控制结构

  嵌套控制结构可以把控制结构放入另一个控制结构之内(例如在 For...Next 循环中的If...Then 块)。一个控制结构内部包含另一个控制结构叫做 nest(嵌套)。在 Visual Basic 中,控制结构的嵌套层数没有限制。按一般习惯,为了使判定结构和循环结构更具可读性,总是用缩排方式书写判定结构或循环的正文部分。

  例如,下面的过程要把打印机和屏幕共有的字体名全部打印出来:

  Private Sub Form_Click ()

  Dim SFont, PFont

  For Each SFont In Screen.Fonts ()

  For Each PFont In Printer.Fonts ()

  If SFont = PFont Then

  Print SFont

  End If

  Next PFont

  Next SFont

  End Sub

  注意,第一个 Next 关闭了内层的 For 循环,而最后一个 For 关闭了外层的 For 循环。同样,在嵌套的 If 语句中,End If 语句自动与最靠近的前一个 If 语句配对。嵌套的 Do...Loop 结构的工作方式也是一样的,最内圈的 Loop 语句与最内圈的 Do 语句匹配。
2009-11-24 15:34
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
得分:0 
退出控制结构

  用 Exit 语句可以直接退出 For 循环、Do 循环、子过程或函数过程。Exit 语句的语法很简单:Exit For 在 For 循环中出现的次数没有限制,Exit Do 在Do 循环中出现的次数也没有限制。

  For counter = start To end

  [Step increment]

  [statementblock]

  [Exit For]

  [statementblock]

  Next [counter[, counter] [,...]]

  Do [{While | Until} condition]

  [statementblock]

  [Exit Do]

  [statementblock]

  Loop
Exit Do 语句可以在 Do 循环语法的所有版本中使用。

  Exit For 和 Exit Do 非常有用,因为它有时适于立即退出循环,而且不再执行循环中的任何进一步迭代或者语句。例如,在前面的打印屏幕和打印机共有字体的例子中,程序不断将打印机字体和给定的屏幕字体作比较,甚至在已经找到了一个相符的打字机字体后还在继续寻找。对这个函数有一个效率更高的改进版,在此,只要找到相匹配的字体后就立即退出循环:

  Private Sub Form_Click ()

  Dim SFont, PFont

  For Each SFont In Screen.Fonts ()

  For Each PFont In Printer.Fonts ()

  If SFont = PFont Then

  Print Sfont

  Exit For'退出内圈循环。

  End If

  Next PFont

  Next SFont

  End Sub

  正如此例所表明的, Exit 语句几乎总是出现在 If 语句或 Select Case 语句内部,而 If 语句或 Select Case 语句在循环内嵌套。

  用 Exit 语句中断循环时,计数器变量的值会因退出循环的方式而不同:

  1.在完成循环时,计数器的值等于上限值加上步进值。

  2.在提前退出循环时,计数器变量保持其值,并遵从有关取值范围的一般规则。

  3.在集合之外叠代时,如果计数器变量为 Object 类型,则其值为Nothing;如果计数器变量为 Variant 类型,则其值为 Empty。

  退出子过程或函数过程

  也可从控制结构内部退出过程。Exit Sub 和 Exit Function 的语法,和上一节“退出控制结构”中的 Exit For 和 Exit Do 相似。Exit Sub 可以出现在子过程主体内的任何地方,出现的次数随需要而定。

  当过程已完成每个任务并可直接返回时,Exit Sub 和 Exit Function 是非常有用的。例如,如果想改动前面的例子,使得对查找到的打印机和屏幕的共有字体,只打印其中的第一个,则可用 Exit Sub :

  Private Sub Form_Click ()

  Dim SFont, PFont

  For Each SFont In Screen.Fonts ()

  For Each PFont In Printer.Fonts ()

  If SFont = PFont Then

  Print Sfont

  Exit Sub  '退出过程。

  End If

  Next PFont

  Next SFont

  End Sub
2009-11-24 15:38
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
得分:0 
都是编译错误,参数不可选。请高手指点。
2009-11-24 15:42
gdc123
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2008-8-8
得分:0 
新问题:

下面两个效果不一样

Private Sub Form_Click()
Dim sfont, pfont
For I = 0 To Screen.FontCount - 1
For j = 0 To Printer.FontCount - 1
sfont = Screen.Fonts(I)
pfont = Printer.Fonts(j)
If sfont = pfont Then
'Print sfont
List1.AddItem sfont
Exit For
End If
Next
Next
Print List1.ListCount    '这个打印出 101 ,(我的电脑)
End Sub

------------


Private Sub Form_Click()
Dim m(1000) As String
Dim n(1000) As String
For a = 1 To Screen.FontCount
m(a) = Screen.Fonts(a)
Next a
For b = 1 To Printer.FontCount
n(b) = Printer.Fonts(b)
Next b
For Each SFont In m()
For Each PFont In n()
If SFont = PFont Then
'Print SFont
List1.AddItem sfont    '这个List1里有好多空白,上面的没有。
Exit For '退出内圈循环。
End If
Next PFont
Next SFont
Print List1.ListCount    '这个打印出 984 ,(我的电脑)
End Sub

[ 本帖最后由 gdc123 于 2009-11-25 09:44 编辑 ]
2009-11-25 09:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-293077-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042346 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved