دوست عزیز
این کد را هم امتحان کن من دارم از این استفاده میکنم
کد تغییر را در GotFocus قرار بده یعنی با گرفتن فوکوس در TextBox اتوماتیک آنرا فارسی کنه و در تکستهایی که لازمه انگلیسی یا هر زبان دیگه ای بشه به آن زبان تغییر کنه
اول یک مدول باز کن و کدهای زیر را در آن قرار بده
Private Declare Function GetKeyboardLayoutName _
Lib "user32" _
Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function LoadKeyboardLayout _
Lib "user32" _
Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, _
ByVal Flags As Long) As Long
Private Const LANG_NORSK As String = "00000414"
Private Const LANG_ARABIC As String = "00000401"
Private Const LANG_NL_STD As String = "00000413"
Private Const LANG_EN_US As String = "00000409"
Private Const LANG_DU_STD As String = "00000407"
Private Const LANG_FR_STD As String = "0000040C"
Private Const LANG_FARSI As String = "00000429"
Private Const KL_NAMELENGTH As Long = 9
Private Const KLF_ACTIVATE As Long = &H1
که من انواع ثابتها را برای انواع زبانها در آن معرفی کرده ام
سپس در GetFocus تکست کد زیر را بنویس
Private Sub txtSearch_GotFocus()
Call SetKbLayout (LANG_FARSI ) ' For Farsi
Call SetKbLayout (LANG_EN_US ) ' For English
' And you can choose another Const for another Language
End Sub
که برای هر زبانی میتوانی از کد و ثابت آن زبان استفاده کنی
در تکستی که قرار است فارسی نوشته شود در GetFocus آن ثابت فارسی را بنویس و در تکستی که قرار است انگلیسی یا هر زبانی نوشته شود ثابت آنرا قرار بده
حال با گرفتن فوکوس اتوماتیک به آن زبان تغییر زبان داده میشود
حال تابع اصلی را هم میتوانی در مدول قرار بدی ( در اینصورت باید آنرا Public تعریف کنی ) و هم در خود فرم
این هم تابع اصلی
Private Function SetKbLayout(strLocaleId As String) As Boolean
Dim strLocId As String 'used to retrieve current KeyboardLayout
Dim strMsg As String 'used as buffer
Dim lngErrNr As Long 'receives the API-error number
strLocId = String(KL_NAMELENGTH, 0)
GetKeyboardLayoutName strLocId
If strLocId = (strLocaleId & Chr(0)) Then
SetKbLayout = True
Else
strLocId = String(KL_NAMELENGTH, 0)
strLocId = LoadKeyboardLayout((strLocaleId & Chr(0)), _
KLF_ACTIVATE)
If IsNull(strLocId) Then 'returns NULL when it fails
SetKbLayout = False
Else
strLocId = String(KL_NAMELENGTH, 0)
GetKeyboardLayoutName strLocId
If strLocId = (strLocaleId & Chr(0)) Then
SetKbLayout = True
Else
SetKbLayout = False
End If
End If
End If
End Function
امیدوارم بتونی استفاده کنی