|
|
|
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 |
|