如何在VB中使用keypress?

如何在VB中使用keypress?,第1张

代码如下:\x0d\Visual Basic code\x0d\Private Sub GcTextBox2_KeyPress(ByVal sender As Object, ByVal e As SystemWindowsFormsKeyPressEventArgs) Handles GcTextBox2KeyPress\x0d\'单独判断回车\x0d\Dim a As Char = ConvertToChar(KeysEnter)\x0d\If eKeyCharEquals(a) Then\x0d\MessageBoxShow("Enter Press")\x0d\End If\x0d\'判断CTRL+回车\x0d\If (ControlModifierKeys And KeysShift) = KeysShift Then\x0d\Dim aa As Char = ConvertToChar(KeysReturn)\x0d\If eKeyChar = aa Then\x0d\MessageBoxShow("Control+Enter Press")\x0d\End If\x0d\End If\x0d\End Sub

参考方法如下,具体解释已经注解在代码中;
/定义变量
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
static int hKeyboardHook = 0;
HookProc KeyboardHookProcedure;
/
声明API函数
/
// 安装钩子 (using SystemRuntimeInteropServices;)
[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]
public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId);
// 卸载钩子
[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
// 继续下一个钩子
[DllImport("user32dll",CharSet=CharSetAuto, CallingCStdCall)]
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
// 取得当前线程编号(线程钩子需要用到)
[DllImport("kernel32dll")]
static extern int GetCurrentThreadId();
//钩子子程:就是钩子所要做的事情
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
if (nCode >= 0)
{
/
//线程键盘钩子判断是否按下键
Keys keyData = (Keys)wParam;
if(lParamToInt32() > 0)
{
// 键盘按下
}
if(lParamToInt32() < 0)
{
// 键盘抬起
}
/
/
//全局键盘钩子判断是否按下键
wParam = = 0x100 // 键盘按下
wParam = = 0x101 // 键盘抬起
/
KeyMSG m = (KeyMSG) MarshalPtrToStructure(lParam, typeof(KeyMSG));//键盘
// 在这里添加你想要做是事情(比如把键盘nCode记录下来,搞个邮件发送程序发到自己的邮箱去)
return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
//键盘结构
public struct KeyMSG
{
public int vkCode; //键值
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
// 安装钩子
public void HookStart()
{
if(hKeyboardHook == 0)
{
// 创建HookProc实例
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
// 设置线程钩子

hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,MarshalGetHINSTANCE(AssemblyGetExecutingAssembly()GetModules()[0]),0);

//
//键盘线程钩子
//SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtrZero, GetCurrentThreadId()); //GetCurrentThreadId()为要监视的线程ID,你完全可以自己写个方法获取QQ的线程哦
//键盘全局钩子,需要引用空间(using SystemReflection;)
//SetWindowsHookEx( 13,KeyboardHookProcedure,MarshalGetHINSTANCE(AssemblyGetExecutingAssembly()GetModules()[0]),0);
//
//关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数:
//idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13,
//线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。
//
//lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可
//以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。
//
//hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前
//进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。
//
//threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。
//

// 如果设置钩子失败
if(hKeyboardHook == 0 )
{
HookStop();
throw new Exception("SetWindowsHookEx failed");
}
}
}
// 卸载钩子
public void HookStop()
{
bool retKeyboard = true;
if(hKeyboardHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = 0;
}
if (!( retKeyboard))
throw new Exception("UnhookWindowsHookEx failed");
}

a = TextBox1Text
n = Len(a)
下面要加一句:
i = 1
还有,你的程序中只处理小写字母,AEIOU都 算“其它字符”吗?否则的话,最后的提示要改为“小写元音字母”
要改的话可以这样处理:

Do
b = Mid(a, i, 1)
If Asc(b) >= 97 And Asc(b) <= 122 Then
Select Case b
改为:
Do
b = Ucase(Mid(a, i, 1))
Select Case b
其余不变就可以了。

textBox_keyPress/此为C#的文本框只输入数字以及退格键方法可作为参考/
/textBox的keyPress事件种编写如下代码/
if (!charIsDigit(eKeyChar) && eKeyChar != (char)8)
{
eHandled = true;//屏蔽按键
}
else
{
eHandled = false;
}

Private Sub TextBox1_KeyPress(ByVal sender As SystemObject, ByVal e As SystemWindowsFormsKeyPressEventArgs) Handles TextBox1KeyPress
If eKeyCharToString() = Chr(13) Then
Dim str As String = TextBox1Text
If Not ListBox1ItemsContains(str) Then
ListBox1ItemsAdd(str)
End If
End If
End Sub
Private Sub btn_Remove_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button1Click
If ListBox1SelectedIndex > 0 Then
ListBox1ItemsRemoveAt(ListBox1SelectedIndex)
End If
End Sub
Private Sub btn_Clear_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button2Click
ListBox1ItemsClear()
End Sub

keyascii表示你按下的键的代码(AScii码)可以用以下常数表示。nbsp;===========Keycodenbsp;常数nbsp;nbsp;nbsp;可在代码中的任何地方用下列常数代替实际值:常数nbsp;值nbsp;描述nbsp;vbKeyLButtonnbsp;0x1nbsp;鼠标左键nbsp;vbKeyRButtonnbsp;0x2nbsp;鼠标右键nbsp;vbKeyCancelnbsp;0x3nbsp;CANCELnbsp;键nbsp;vbKeyMButtonnbsp;0x4nbsp;鼠标中键nbsp;vbKeyBacknbsp;0x8nbsp;BACKSPACEnbsp;键nbsp;vbKeyTabnbsp;0x9nbsp;TABnbsp;键nbsp;vbKeyClearnbsp;0xCnbsp;CLEARnbsp;键nbsp;vbKeyReturnnbsp;0xDnbsp;ENTERnbsp;键nbsp;vbKeyShiftnbsp;0x10nbsp;SHIFTnbsp;键nbsp;vbKeyControlnbsp;0x11nbsp;CTRLnbsp;键nbsp;vbKeyMenunbsp;0x12nbsp;MENUnbsp;键nbsp;vbKeyPausenbsp;0x13nbsp;PAUSEnbsp;键nbsp;vbKeyCapitalnbsp;0x14nbsp;CAPSnbsp;LOCKnbsp;键nbsp;vbKeyEscapenbsp;0x1Bnbsp;ESCnbsp;键nbsp;vbKeySpacenbsp;0x20nbsp;SPACEBARnbsp;键nbsp;vbKeyPageUpnbsp;0x21nbsp;PAGEnbsp;UPnbsp;键nbsp;vbKeyPageDownnbsp;0x22nbsp;PAGEnbsp;DOWNnbsp;键nbsp;vbKeyEndnbsp;0x23nbsp;ENDnbsp;键nbsp;vbKeyHomenbsp;0x24nbsp;HOMEnbsp;键nbsp;vbKeyLeftnbsp;0x25nbsp;LEFTnbsp;ARROWnbsp;键nbsp;vbKeyUpnbsp;0x26nbsp;UPnbsp;ARROWnbsp;键nbsp;vbKeyRightnbsp;0x27nbsp;RIGHTnbsp;ARROWnbsp;键nbsp;vbKeyDownnbsp;0x28nbsp;DOWNnbsp;ARROWnbsp;键nbsp;vbKeySelectnbsp;0x29nbsp;SELECTnbsp;键nbsp;vbKeyPrintnbsp;0x2Anbsp;PRINTnbsp;SCREENnbsp;键nbsp;vbKeyExecutenbsp;0x2Bnbsp;EXECUTEnbsp;键nbsp;vbKeySnapshotnbsp;0x2Cnbsp;SNAPSHOTnbsp;键nbsp;vbKeyInsertnbsp;0x2Dnbsp;INSERTnbsp;键nbsp;vbKeyDeletenbsp;0x2Enbsp;DELETEnbsp;键nbsp;vbKeyHelpnbsp;0x2Fnbsp;HELPnbsp;键nbsp;vbKeyNumlocknbsp;0x90nbsp;NUMnbsp;LOCKnbsp;键nbsp;Anbsp;至nbsp;Znbsp;键与nbsp;Anbsp;–nbsp;Znbsp;字母的nbsp;ASCIInbsp;码相同:常数nbsp;值nbsp;描述nbsp;vbKeyAnbsp;65nbsp;Anbsp;键nbsp;vbKeyBnbsp;66nbsp;Bnbsp;键nbsp;vbKeyCnbsp;67nbsp;Cnbsp;键nbsp;vbKeyDnbsp;68nbsp;Dnbsp;键nbsp;vbKeyEnbsp;69nbsp;Enbsp;键nbsp;vbKeyFnbsp;70nbsp;Fnbsp;键nbsp;vbKeyGnbsp;71nbsp;Gnbsp;键nbsp;vbKeyHnbsp;72nbsp;Hnbsp;键nbsp;vbKeyInbsp;73nbsp;Inbsp;键nbsp;vbKeyJnbsp;74nbsp;Jnbsp;键nbsp;vbKeyKnbsp;75nbsp;Knbsp;键nbsp;vbKeyLnbsp;76nbsp;Lnbsp;键nbsp;vbKeyMnbsp;77nbsp;Mnbsp;键nbsp;vbKeyNnbsp;78nbsp;Nnbsp;键nbsp;vbKeyOnbsp;79nbsp;Onbsp;键nbsp;vbKeyPnbsp;80nbsp;Pnbsp;键nbsp;vbKeyQnbsp;81nbsp;Qnbsp;键nbsp;vbKeyRnbsp;82nbsp;Rnbsp;键nbsp;vbKeySnbsp;83nbsp;Snbsp;键nbsp;vbKeyTnbsp;84nbsp;Tnbsp;键nbsp;vbKeyUnbsp;85nbsp;Unbsp;键nbsp;vbKeyVnbsp;86nbsp;Vnbsp;键nbsp;vbKeyWnbsp;87nbsp;Wnbsp;键nbsp;vbKeyXnbsp;88nbsp;Xnbsp;键nbsp;vbKeyYnbsp;89nbsp;Ynbsp;键nbsp;vbKeyZnbsp;90nbsp;Znbsp;键nbsp;0nbsp;至nbsp;9nbsp;键与数字nbsp;0nbsp;–nbsp;9nbsp;的nbsp;ASCIInbsp;码相同:常数nbsp;值nbsp;描述nbsp;vbKey0nbsp;48nbsp;0nbsp;键nbsp;vbKey1nbsp;49nbsp;1nbsp;键nbsp;vbKey2nbsp;50nbsp;2nbsp;键nbsp;vbKey3nbsp;51nbsp;3nbsp;键nbsp;vbKey4nbsp;52nbsp;4nbsp;键nbsp;vbKey5nbsp;53nbsp;5nbsp;键nbsp;vbKey6nbsp;54nbsp;6nbsp;键nbsp;vbKey7nbsp;55nbsp;7nbsp;键nbsp;vbKey8nbsp;56nbsp;8nbsp;键nbsp;vbKey9nbsp;57nbsp;9nbsp;键nbsp;下列常数代表数字键盘上的键:常数nbsp;值nbsp;描述nbsp;vbKeyNumpad0nbsp;0x60nbsp;0nbsp;键nbsp;vbKeyNumpad1nbsp;0x61nbsp;1nbsp;键nbsp;vbKeyNumpad2nbsp;0x62nbsp;2nbsp;键nbsp;vbKeyNumpad3nbsp;0x63nbsp;3nbsp;键nbsp;vbKeyNumpad4nbsp;0x64nbsp;4nbsp;键nbsp;vbKeyNumpad5nbsp;0x65nbsp;5nbsp;键nbsp;vbKeyNumpad6nbsp;0x66nbsp;6nbsp;键nbsp;vbKeyNumpad7nbsp;0x67nbsp;7nbsp;键nbsp;vbKeyNumpad8nbsp;0x68nbsp;8nbsp;键nbsp;vbKeyNumpad9nbsp;0x69nbsp;9nbsp;键nbsp;vb

你确认你的题目没打错?Label2Text &= Space(______) 里面的&是明显多余的。

Dim i, j, n As Integer
n = TextBox1Text
Label2Text = ""
For i = n To 1 Step -1
Label2Text = Label2Text & Space(n - i)
For j = 1 To 2 i - 1
Label2Text = Label2Text & n - i + 1
Next
Label2Text = Label2Text & vbCrLf

Next

Public Sub AutoComplete(ByVal cmb As ComboBox, ByVal e As SystemWindowsFormsKeyPressEventArgs)
        If cmbDataSource Is Nothing Then
            Return
        End If
        If eKeyChar = MicrosoftVisualBasicChrW(KeysEnter) Then
            Return
        End If
        Dim strFindStr As String = ""
 
        If eKeyChar = MicrosoftVisualBasicChrW(KeysBack) Then
            If (cmbSelectionStart >= cmbTextLength) Then
                If cmbTextLength > 0 Then
                    strFindStr = cmbTextSubstring(0, cmbTextLength - 1)
                End If
            Else
                If cmbSelectionStart > 0 Then
                    strFindStr = cmbTextSubstring(0, cmbSelectionStart - 1)
                End If
            End If
            eHandled = False
        Else
            If (cmbSelectionLength = 0) Then
                strFindStr = cmbText + eKeyChar
            Else
                If (cmbSelectionStart >= cmbTextLength) Then
                    strFindStr = eKeyChar
                Else
                    If cmbSelectionStart > 0 Then
                        strFindStr = cmbTextSubstring(0, cmbSelectionStart - 1) + eKeyChar
                    Else
                        strFindStr = eKeyChar
                    End If
                End If
            End If
        End If
 
        Dim intIdx As Integer = -1
        Dim dv As DataView
        If TypeOf (cmbDataSource) Is DataTable Then
            dv = CType(cmbDataSource, DataTable)DefaultView
            If strFindStr <> "" Then
                dvRowFilter = cmbDisplayMember & " Like '%" & strFindStr & "%'"
            Else
                dvRowFilter = ""
            End If
            cmbDataSource = dv
            cmbSelectedIndex = -1
            cmbText = strFindStr
        Else
            dv = CType(cmbDataSource, DataView)
            If strFindStr <> "" Then
                dvRowFilter = cmbDisplayMember & " Like '%" & strFindStr & "%'"
            Else
                dvRowFilter = ""
            End If
            cmbDataSource = dv
            cmbSelectedIndex = -1
            cmbText = strFindStr
        End If
 
        cmbSelectionStart = strFindStrLength
        eHandled = True
    End Sub
    
    Private Sub comboBox1_KeyPress(ByVal sender As SystemObject, ByVal e As SystemWindowsFormsKeyPressEventArgs) Handles comboBox1KeyPress
        AutoComplete(sender, e)
    End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12968251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存