我的方法如下:Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _ lpList As Long) As Long Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _ (ByVal pwszKLID As String) As Long Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _ hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _ flags As Long) As Long
Const IME_CONFIG_GENERAL = 1 Const KLF_REORDER = &H8 Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long '输入法列表 Dim ActIme As Long '当前输入法 Dim X% '当单前输入法数量Private Sub Form_Load() X = GetKeyboardLayoutList(32, la(1)) end sub Private Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long) 'vsflexgrid 控件存在输入问题? 以下为避免方法 Dim colNumber As Long Dim i As Long Dim strName$ strName = GetKeyboardLayout(0) ActivateKeyboardLayout la(1), 1 For i = 1 To X If la(i) = strName Then Exit For Next i If i <> 1 Then ActivateKeyboardLayout la(1), 1 Else ActivateKeyboardLayout la(X), X ActivateKeyboardLayout la(i), i end Sub
修改如下:Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _ lpList As Long) As Long Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _ (ByVal pwszKLID As String) As Long Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _ hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _ flags As Long) As Long
Const IME_CONFIG_GENERAL = 1 Const KLF_REORDER = &H8 Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long '输入法列表 Dim ActIme As Long '当前输入法 Dim X% '当单前输入法数量Private Sub Form_Load() X = GetKeyboardLayoutList(32, la(1)) end subPrivate Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long) 'vsflexgrid 控件存在输入问题? 以下为避免方法 Dim colNumber As Long Dim i As Long Dim strName$ if col=1 then ActivateKeyboardLayout la(1), 1 else ActivateKeyboardLayout la(2), 2 end if end Sub
lpList As Long) As Long
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _
(ByVal pwszKLID As String) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _
hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _
flags As Long) As Long
Const IME_CONFIG_GENERAL = 1
Const KLF_REORDER = &H8
Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long '输入法列表
Dim ActIme As Long '当前输入法
Dim X% '当单前输入法数量Private Sub Form_Load()
X = GetKeyboardLayoutList(32, la(1))
end sub
Private Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long) 'vsflexgrid 控件存在输入问题? 以下为避免方法
Dim colNumber As Long
Dim i As Long
Dim strName$
strName = GetKeyboardLayout(0)
ActivateKeyboardLayout la(1), 1
For i = 1 To X
If la(i) = strName Then Exit For
Next i
If i <> 1 Then ActivateKeyboardLayout la(1), 1 Else ActivateKeyboardLayout la(X), X
ActivateKeyboardLayout la(i), i
end Sub
lpList As Long) As Long
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _
(ByVal pwszKLID As String) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _
hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _
flags As Long) As Long
Const IME_CONFIG_GENERAL = 1
Const KLF_REORDER = &H8
Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long '输入法列表
Dim ActIme As Long '当前输入法
Dim X% '当单前输入法数量Private Sub Form_Load()
X = GetKeyboardLayoutList(32, la(1))
end subPrivate Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long) 'vsflexgrid 控件存在输入问题? 以下为避免方法
Dim colNumber As Long
Dim i As Long
Dim strName$
if col=1 then
ActivateKeyboardLayout la(1), 1
else
ActivateKeyboardLayout la(2), 2
end if
end Sub
去那里下载这个控件,版本v.6.0或5.0 都可以。