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下调试通过。 |