PDA

View Full Version : مشکلی عجیب و خند دار با فارسی کردن کیبورد



R_Rajaee_Rad
دوشنبه 23 اسفند 1389, 10:57 صبح
سلام من این تکه کد گذاشتم موقع اجرای برنامه که خود به خود کیبورد رو فارسی کنه


Private Sub Farsi()
If InputLanguage.CurrentInputLanguage.LayoutName = "US" Then
MessageBox.Show("TEST")
Dim farsi As New Globalization.CultureInfo("FA-IR")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(farsi)
End If
End Sub

همون طور که میبینید داخل یه ساب هست که هرجا خواستم ساب رو صدا بزنم
مشکل من اینه که در خط دوم اون پیغام TEST رو اگر بردارم دیگه برنامه کار نمیکنه
یعنی اگر اونMESSAGE BOX غیر فعال بشه صفحه کلید به طور خودکار فارسی نمیشه!!!
باید چکار کنم؟؟

siavash_realy
دوشنبه 23 اسفند 1389, 11:26 صبح
من برای فارسی کردن کیبورد کدی رو نوشته بودم که درست کار میکنه تو ویندوزهای مختلف ، شاید به کار شما هم بیاد :

Public Shared Sub ChangeKB2Persian()
'فارسي كردن كيبورد
Dim _InstalledLanguage As Integer
Dim _LayoutName As String

Try
For _InstalledLanguage = 0 To InputLanguage.InstalledInputLanguages.Count - 1
_LayoutName = InputLanguage.InstalledInputLanguages(_InstalledLa nguage).LayoutName.ToLower
If _LayoutName = "persian" OrElse _LayoutName = "farsi" Then
InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages(_InstalledLa nguage)
Exit For
End If
Next _InstalledLanguage
Catch ex As Exception
'Catch Error
End Try

End Sub

shotor moo ferferi
دوشنبه 23 اسفند 1389, 15:26 عصر
سلام نیازی به این همه پیچیدگی نیست. این کدی رو که برات می ذارم رو در رویداد load فرم اصلیت mdiform قرار بده تا همه فرم هات با کیبورد فارسی کار کنن و یا به صورت مجزا در فرم های دلخواه بذار تا فقط همون فرم فارسی بشه . می تونی در sub هم قرار بدی و فراخوانیش کنی

Dim myCulture AsNew Globalization.CultureInfo("fa-IR")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(myCulture)

shahab2025
دوشنبه 23 اسفند 1389, 16:22 عصر
سلام
من sub را اینطوری نوشتم و درست هم کار میکنه . شاید به دردت بخوره

Public Shared Sub Farsi_Keyboard()
'
Dim locInputType As New System.Globalization.CultureInfo("FA-IR")
Application.CurrentInputLanguage = InputLanguage.FromCulture(locInputType)
End Sub

siavash_realy
سه شنبه 24 اسفند 1389, 08:37 صبح
سلام نیازی به این همه پیچیدگی نیست. این کدی رو که برات می ذارم رو در رویداد load فرم اصلیت mdiform قرار بده تا همه فرم هات با کیبورد فارسی کار کنن و یا به صورت مجزا در فرم های دلخواه بذار تا فقط همون فرم فارسی بشه . می تونی در sub هم قرار بدی و فراخوانیش کنی

Dim myCulture AsNew Globalization.CultureInfo("fa-IR")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(myCulture)

این روشی که شما و shahab2025 میگید خیلی خوبه ولی یه ایرادی که دارن اینه که اگر کاربر زبان فارسی بر روی دستگاهش نصب نشده باشه برنامه شما در مواجهه با اجرای کدهایی که ذکر کردید با خطا مواجه میشه و اگر خطا رو Catch نکرده باشین برنامه تون متوقف میشه !

siavash_realy
سه شنبه 24 اسفند 1389, 08:46 صبح
در ضمن کیبورد فارسی در ویندوزهای مختلف xp,2003,2008,vista,7 اسامی متفاوتی برای لود کردن دارند (این اسامی شامل farsi و persian است)، برای اینکه تو تمامی نسخه های ویندوزی موجود بتونید کیبورد رو فارسی کنید باید هم زبان "farsi" و هم زبان "persian" رو ساپورت کنید