您的位置:寻梦网首页编程乐园VB 编程乐园VB问题全功略

VB问题全功略(20)

上一页(20)下一页

96、如何让二个文字框同步联动?
97、如何避免核取方块式的 ListBox 已选定的项目被更改?
98、如何隐藏及再显示鼠标
99、您是左撇子吗?交换鼠标的左右键!
100、资料的加密 / 解密

96、如何让二个文字框同步联动?

要作到这个动作,有的人会想要用 KeyDown 或 KeyPress 事件来处理,但是这都是错的,虽然第二个文字框终究会动,但是总是比第一个文字框慢了一拍,永远会漏掉最后一个字!为什么呢?

因为由键盘输入时,程序接收的顺序为 KeyDown --> KeyPress --> KeyUp,而在 KeyPress 时,才会传入 Keyascii〈此点可由各事件中传入的参数得知〉转换成文字,所以在 KeyDown 时,还抓不到输入的字,在 KeyPress 时,只有 Keyascii 则需要转换才抓得到,但是中文比较麻烦!

在 KeyUp 时虽然已经可以抓到键入的值,但是我认为倒不如在 Change 事件中来得简单!不管 User 输入什么,只有第一个文字框资料异动时,才需要处理。

Private Sub Text1_Change()
Text2 = Text1 
End Sub

如果不管第一个文字框输入什么,第二个文字框只要显示最后一个字,则程序要改成:

Private Sub Text1_Change()
Text2 = Right(Text1, 1)
End Sub

97、如何避免核取方块式的 ListBox 已选定的项目被更改?

当 ListBox 的 Style 设定成〈1-项目包含核取方块〉,ListBox 控制项以每一个文字项目跟随一个核取方块的方式显示。您可透过选取各项目边的核取方块以选择 ListBox 中的多个项目。

但有时候,您这样子设定的目的是为了显示一些事先选定的项目,例如从资料库中抓出的资料或是一些安装软件的设定选项确认画面。您不希望因为使用者再去点选 ListBox 的项目而更动原来设定的项目,这时候,您不能将 Enabled 属性设成 False,因为这样子卷动杆就无法卷动,使用者就无法看到 ListBox 的其他项目;您也无法像 TextBox 一样设定成 Lock 状态,因为 ListBox 没有 Lock 属性。

以下的程序代码可以解决这个问题,在 Form 中放一个 CommandButton 及一个 ListBox,将 ListBox 的 Style 设定成〈1-项目包含核取方块〉:

Dim isDisabled As Boolean '是否取消可选定状态

Private Sub Command1_Click()
isDisabled = Not isDisabled 
End Sub

Private Sub List1_ItemCheck(Item As Integer)
If isDisabled Then
List1.Selected(Item) = Not List1.Selected(Item)
End If
End Sub

当 isDisabled 设定成 True 时,使用者一旦选定 ListBox 的某一个项目,程序会立即反转它的状态,看起来就像没改变过选定状态一样!而同时 ListBox 还是可以卷动!

98、如何隐藏及再显示鼠标

很简单,只用到了一个 ShowCursor API,参数也很简单,只有一个 bShow,设定值如下:

True:显示鼠标 / False:隐藏鼠标

Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long

99、您是左撇子吗?交换鼠标的左右键!

很简单,只用到了一个 SwapMouseButton API,参数也很简单,只有一个 bSwap,设定值如下:

True:左右键互换 / False:恢复正常

Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long

假设我是左撇子,则程序为:

Dim RetVal As Long
RetVal = SwapMouseButton(True)

100、资料的加密 / 解密

以下二个模组,一个处理加密,一个处理解密,加密处理必须传入参数 (就是要加密的字串),加密后将资料存到加密文件,要解密时,则从文件案中读出并解密: 

(假设文件案名称为 C:\加密文件.qwe, 您可以自行更改文件名或路径)

'处理加密
Private Function Encrypt(varPass As String)
If Dir("C:\加密文件.qwe") <> "" Then: Kill "C:\加密文件.qwe"
Dim varEncrypt As String * 50
Dim varTmp As Double
Open "C:\加密文件.qwe" For Random As #1 Len = 50

For I = 1 To Len(varPass)
varTmp = Asc(Mid$(varPass, I, 1))
varEncrypt = Str$(((((varTmp * 1.5) / 2.1113) * 1.111119) * I))
Put #1, I, varEncrypt
Next I

Close #1
End Function

'处理解密
Private Function Decrypt() As String
Open "C:\加密文件.qwe" For Random As #1 Len = 50
Dim varReturn As String * 50
Dim varConvert As Double

上一页(20)下一页