问几个响应键盘的问题

胖胖的鱼头 2005-03-10 01:51:46
1、如何将回车键锁定到某个button上,按下回车键就相当于按下了这个button键,并且锁定到哪一个button是可以是程序中动态改变的。
2、如何对输入到text框中的字符进行校验,使其只能输入数字。
3、第三个问题跟键盘响应没有关系,编译生成EXE文件时是否可以传递参数,如何实现,在程序中如果得到此参数。
...全文
103 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tztz520 2005-03-10
  • 打赏
  • 举报
回复
得到焦点:
Command2.SetFocus
胖胖的鱼头 2005-03-10
  • 打赏
  • 举报
回复
第二个问题已经搞定了,谢谢tztz520,第三个问题搞不定了算了。第一个问题好像被你们说得有点复杂,在我的理解中只要将焦点设到这个button中就可以了,只是不知道怎样在程序中改变焦点
li_jun 2005-03-10
  • 打赏
  • 举报
回复
2.在VB中提供的有一个前两个字母是IS的函数就可以检测输入的是不是数字了
Zygodactyous 2005-03-10
  • 打赏
  • 举报
回复
1、如何将回车键锁定到某个button上,按下回车键就相当于按下了这个button键,并且锁定到哪一个button是可以是程序中动态改变的。

回答:判断按键,如果是回车键就调用Buttonname_Click事件

2、如何对输入到text框中的字符进行校验,使其只能输入数字。

回答:可以用正则表达式来处理,也可以这样:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strNumbers As String
strNumbers = "1234567890" + Chr(8) + Chr(46)
If InStr(strNumbers, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub

3、第三个问题跟键盘响应没有关系,编译生成EXE文件时是否可以传递参数,如何实现,在程序中如果得到此参数。

回答:一般是调用.Ini文件,或是XML文件
tztz520 2005-03-10
  • 打赏
  • 举报
回复
就是用参数运行你的程序得到的.

比如你的程序在F盘生成了abc.exe

你就可以在windows的"开始"---"运行"里输入: abc.exe "参数"
这样就执行了你的程序,你的程序就会得到那个参数了
tztz520 2005-03-10
  • 打赏
  • 举报
回复
1.
可以用键盘钩子



'以下是模块中的代码

Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2

Public Sub UnHookKBD()
If hnexthookproc <> 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End Sub
Public Function EnableKBDHook()
If hnexthookproc <> 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
MyKBHFunc, App.hInstance, App.ThreadID)
If hnexthookproc <> 0 Then
EnableKBDHook = hnexthookproc
End If
End Function
Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

If wParam = 13 And iCode = 0 And lParam > 0 Then
Debug.Print "按了回车键"'这里就捕捉到回车键按下的信息,你可以在这里写代码触发你的按钮事件
End If
Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
End Function



'以下是窗口中的代码
Private Sub Form_Load()
Call EnableKBDHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call UnHookKBD
End Sub
胖胖的鱼头 2005-03-10
  • 打赏
  • 举报
回复
你说的command命令是在程序得到参数吗,那在哪里输入参数呢,是不是在工程菜单->工程属性->生成->命令行参数中输入,我在这里输入了,但MsgBox Command提示的是空的啊
tztz520 2005-03-10
  • 打赏
  • 举报
回复
2.这样也可以.

Private Sub Text1_KeyPress(KeyAscii As Integer)
InputNumeric KeyAscii, Text1
End Sub

'*****************************************************************
'文本框只能输入数字

Public Sub InputNumeric(KeyAscii As Integer, txtItem As TextBox)
Select Case KeyAscii
Case Asc("-") '允许负数
If txtItem.SelStart = 0 Then
If Left(txtItem.Text, 1) = "-" Then
KeyAscii = 0
Beep
End If
Else
KeyAscii = 0
Beep
End If
Case 8
'无变化,退格键不屏蔽
Case Asc(" ") '32
If txtItem.SelLength = 0 Then
KeyAscii = 0
End If
Case Asc(".") '46 '允许小数点
If InStr(txtItem.Text, ".") Then
KeyAscii = 0
End If
Case Is < Asc(0) '48
KeyAscii = 0
Case Is > Asc(9) '57
KeyAscii = 0
End Select
End Sub
LyricSean 2005-03-10
  • 打赏
  • 举报
回复
3.可以的,使用条件编译
在工程属性 make选项卡的conditional compilation 中设定你的条件编译变量,for example:
conLanguage=0(多个变量可用冒号隔开)
然后在你的程序中使用#获得这个变量
如:
#If conLanguage= 0 Then
msgbox "ENG"
#Else
msgbox "CHN"
#End If
胖胖的鱼头 2005-03-10
  • 打赏
  • 举报
回复
to tztz520: 你给的代码我怎么看不懂啊,对于第二个问题我希望用户在这个Text框输入的时候,只能输入数字键或“.”,其它键则没办法输入,发出错误提示音。
胖胖的鱼头 2005-03-10
  • 打赏
  • 举报
回复
to tztz520: 在我的程序获得焦点的时候,用户按回车键某一个button就响应
tztz520 2005-03-10
  • 打赏
  • 举报
回复
1.
你是要在自己程序获得焦点的时候,响应回车键. 还是只要用户按回车键你都响应呢??
tztz520 2005-03-10
  • 打赏
  • 举报
回复
2.

'为textbox附加ES_NUMBER风格就可以了(Const ES_NUMBER = &H2000&)

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&

Public Sub SetNumber(NumberText As TextBox, Flag As Boolean)
Dim curstyle As Long, newstyle As Long

curstyle = GetWindowLong(NumberText.hwnd, GWL_STYLE)

If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
newstyle = SetWindowLong(NumberText.hwnd, GWL_STYLE, curstyle)
NumberText.Refresh
End Sub

Private Sub Form_Load()
SetNumber Text1, True
End Sub


3.

使用command命令.


Private Sub Form_Load()
MsgBox Command
End Sub


7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧