VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB问题全功略(40)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10335, 日期:2002-02-02
VB问题全功略(40)

196、如何一次关闭 MDIForm 内的所有子表单?
197、按下 CommandButton 之前后,如何让鼠标停留在同一个物件中?
198、您用过【符号字型】吗?
199、避免使用没有效率的 IIF Function 及 Choose Function!
200、如何用TextBox打开和保存文件
196、如何一次关闭 MDIForm 内的所有子表单?

以下这段程序可以让您一次关闭 MDIForm 内的所有子表单,首先在 MDIForm 中建立一个 Menu,假设取名为 mnuCloseAll,则程序码如下:

Private Sub mnuCloseAll_Click()
注释:Screen.MousePointer = vbHourglass
Do While Not (Me.ActiveForm Is Nothing)
Unload Me.ActiveForm
Loop
注释:Screen.MousePointer = vbDefault
End Sub

197、按下 CommandButton 之前后,如何让鼠标停留在同一个物件中?

在一般表单输入画面中,使用者输入了一笔资料后,会去按 注释:存档注释: 按钮,当然他也可能去按任一个按钮,但是不管他是按那一个按钮,如果您不在程序中将鼠标移到下一笔输入的第一个栏位,或其他特定的栏位,使用者便必须自己去移动鼠标,如果这个使用者是使用键盘输入,那更是麻烦!他必须使用 Tab 键一个物件一个物件移动光标。

下面这个范例将示范如何做到在按下 CommandButton 之前后,让鼠标停留在同一个物件中!请在表单中放入二个 TextBox 及一个 CommandButton,不必更改任何属性,将以下之程序复制到表单中:

Dim mCtl As Control

Private Sub Command1_Click()
注释: 在这一个段落中可以执行您想做的动作, 例如存档动作
注释: 然后将鼠标移回按下 Command1 之前鼠标停留的物件上
On Error Resume Next
mCtl.SetFocus
End Sub

Private Sub Text1_GotFocus()
Set mCtl = Text1
End Sub

Private Sub Text2_GotFocus()
Set mCtl = Text2
End Sub

198、您用过【符号字型】吗?

有时候您是否觉得,同样的开发环境,为什么 Microsoft 写出来的程序,画面总是在某些地方看来特别一点点,例如 CommandButton 的样子就是和我们自己写的不一样,您总是感觉他们的 CommandButton 上放的是图形,其实,在 CommandButton 上的不是图形,只不过是某一种字型而已!而且这些字型在每一台 Windows95 / Windows98 / NT 上都有,如果没有,您只要安装了 IE4 或 IE5 就有了。

举个例子好了,如果您要在 CommandButton 上放一个向右或向左的箭头,不使用图片的话,您会使用【>】【<】,但是您在 Microsoft 写出来的程序中看到的是【4】【3】,为什么呢?因为它用的是一种符号字型,就是 Marlett 字型的 3 【4】及 4【3】!

这些字型在那里呢?在本页的下方列了七种符号字型,每一种字型分别列出了 0-9 / a-z / A-Z 共 62 个字元,如果在某些栏位中您看到的仍然是 0-9 / a-z / A-Z,表示您的电脑中没有这种字型,当然,符号字型不只这七种而已,如果您想知道您的电脑中暗藏多少种符号字型的话,方法如下:

在任何可以设定字型的应用程序中,叫出【字型】设定对话框,我们就用 VB 的开发环境来举例好了:
1、在表单上放一个 Label,Caption 随意输入 0-9 / a-z / A-Z 的字元,在属性表中设定字型 (Font)。
2、在【字型】设定对话框的左上方,您随便选择一种【字型】。
3、看看【字型】设定对话框的右下方,【字集】也会跟著改变!每一种字型会包含一种以上的字集。
4、如果字集中出现的是 symbol,表示这种字型就是符号字型!
5、按下确定按钮,看看 Label 上面的字有何改变,很令人惊讶吧!
6、Marlett 字型的 012345 变成了 012345了!

这些符号字型有的非常精美,下一次要使用图片之前,记得找一找符号字型,使用符号字型不但美观,而且可以避免使用图片,让程序瘦身!

注:符号字型范例
( 由于此页档案太大,怕影响速度,所以移除了部份英文字元,若有需要,请自行测试 )


字型 Marlett Monotype Sorts r_symbol MT Extra Wingdings Wingdings 2 Wingdings 3
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9
a a a a a a a a
: : : : : : : :
A a A A A A A A
: : : : : : : :
Z Z Z Z Z Z Z Z

199、避免使用没有效率的 IIF Function 及 Choose Function!

IIF Function 的功能是根据逻辑判断,返回给定的二个值中的一个 (二选一);
Choose Function 的功能是从引数串列中选择并返回一个值 (多选一)。
二个函数的语法如下:

IIf(expr, truepart, falsepart)
Choose(index, choice-1[, choice-2, ... [, choice-n]])

这二个函数乍看之下,好像和 IF....Else IF....Else....End IF 是一样的,没错,结果好像是一样的,但是事实上 IF....Else....End IF 却比较有效率和安全多了,为什么呢?

1、IIf 会计算 truepart 以及 falsepart,虽然它只返回其中的一个,所以您应该要留意这项副作用,
例如,如果 falsepart 会产生除以零的错误,那么程序就会发生错误,即使 expr 为 True。

2、Choose 会计算串列中的每个选择项,即使它只返回一个选项值。所以您应该注意这项副作用,
例如,当您在每个选择项中使用了 MsgBox 函数,那么每计算一个选择项,就会显示一次讯息方块。

而 IF....Else....End IF 却没有上述的缺点!

所以,虽然 IIF 及 Choose Function 的程序码看起来相当简洁,但效率不见得比较好,最重要的,是可能还会导致错误产生。我的建议就是:能不用就不用!

200、如何用TextBox打开和保存文件

作为轻量级的控件,TextBox控件使用率很高,但相关的资料极少谈及如何用TextBox控件打开和保存文件,大都采用回避的态度,对VB初学者带来很多不便。笔者近日为友人做一个英文朗读软件,按友人的要求,软件要能象MS的记事本那样能打开和保存文档。其实实现方法并不复杂,现将心得写出来,希望对大家有帮助。如果您有更好的方法,请来信:handanfang@163.net。

注释:新建标准EXE,加入一个TextBox控件,一个公共对话框,两个菜单。

注释:打开
Private Sub mnuOpen_Click()
CommonDialog1.Filter = "文档文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
Text1.Text = StrConv(InputB$(LOF(1), 1), vbUnicode)
Close #1
End Sub

注释:保存
Private Sub mnuSave_Click()
On Error Resume Next
CommonDialog1.Filter ="文档文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
Print #1, Text1.Text
Close 1
End Sub

TextBox只支持打开64K以下的文件,建议最好设置出错处理。
以上程序在PWin98、VB6.0下调试通过。