چگونه بصورت خودکار زبان کیبورد را در ویژوال بیسیک تغییر دهیم ؟ اگر طراحی برنامه ای را در دست دارید و تمایل دارید مقادیری که کاربران در برنامه وارد میکنند به دلخواه شما یا به عبارتی دیگر راحتی کار را برای کاربران بخواهید یکی از این راه ها استفاده از تغییرات اتوماتیک مقادیر در Text Box ها هست یعنی اگر میخواهید کاربر نام فارسی را در Text Box تایپ کند باید اتوماتیک زبان کیبورد تغییر کند برای این منظور شما از ابزار های واژوال استادیو نمیتوانید استفاده کنید و فقط باید از کد نویسی بهره ببرید در ادامه بنده دو Text Box روی فرم قرار میدهم که با کد های زیر میتوانم بگویم text Box اول فارسی تایپ شود و Text Box دوم زبان دیگری مثل انگلیسی. ضمناً شما میتوانید با تکنیک های RequiredFieldValidator ورود داده های کاربران رو کنترل کنید.در قدم اول قطعه کد زیر را در بالای کلاس اصلی یعنی General قرار دهید:
Imports System.Globalization
سپس نوع زبان های مورد نظر را در پایین نام کلاس بنویسید در این مثال ما دو زبان انتخاب کرده ایم
Public Class Form1 Private PersianInput As InputLanguage Private EnglishInput As InputLanguage End Class
در Form Load برنامه تکه کد زیر را قرار میدهیم به این صورت که در ابتدا یک مقدار اولیه به PersianInput و EnglishInput میدهیم.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load PersianInput = InputLanguage.CurrentInputLanguage EnglishInput = InputLanguage.CurrentInputLanguage Dim count As Integer count = InputLanguage.InstalledInputLanguages.Count For i As Integer = 1 To (count - 1) If InputLanguage.InstalledInputLanguages(i).LayoutName.Contains("Persian") = True Then PersianInput = InputLanguage.InstalledInputLanguages(i) Else If InputLanguage.InstalledInputLanguages(i).LayoutName.Contains("English") = True Then EnglishInput = InputLanguage.InstalledInputLanguages(i) End If End If Next i End Sub
قدم بعدی کمی سلیقه ای هست و شما میتوانید نسبت به سلیقه تون بگید که پس از کدام رویداد این اتفاق بیوفتد در این مثال بنده پس از رویداد Mouse Enter این اقدام رو انجام دادم شما میتوانید هر رویدادی رو برای برنامه تون انتخاب کنید یا تمام رویداد ها مثل mouse Down ,Text change و ... که در این صورت کاربر به هر روشی به Text Box بعدی رفت اتوماتیک این اتفاق برای کیبوردش بیوفتد و نخواهد هر بار زبان کیبورد را تغییر دهد
کد های زیر به ترتیب برای Text Box های فارسی و انگلیسی هستند که در ادامه خواهید دید
Private Sub FaTextBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FaTextBox.MouseEnter InputLanguage.CurrentInputLanguage = PersianInput End Sub Private Sub EnTextBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnTextBox.MouseEnter InputLanguage.CurrentInputLanguage = EnglishInput End Sub
تصویر زیر نمونه ای کامل از این کد هست :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load PersianInput = InputLanguage.CurrentInputLanguage EnglishInput = InputLanguage.CurrentInputLanguage Dim count As Integer count = InputLanguage.InstalledInputLanguages.Count For i As Integer = 1 To (count - 1) If InputLanguage.InstalledInputLanguages(i).LayoutName.Contains("Persian") = True Then PersianInput = InputLanguage.InstalledInputLanguages(i) Else If InputLanguage.InstalledInputLanguages(i).LayoutName.Contains("English") = True Then EnglishInput = InputLanguage.InstalledInputLanguages(i) End If End If Next i End Sub Private Sub FaTextBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FaTextBox.MouseEnter InputLanguage.CurrentInputLanguage = PersianInput End Sub Private Sub EnTextBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnTextBox.MouseEnter InputLanguage.CurrentInputLanguage = EnglishInput End Sub End Class
من با اين كد تونستم جواب بگيرم :
كه كلا زبان سيستم فارسي شد .
بعدش براي اينكه تكست باكس ايميل ،انگلسي تايپ بشه اين كارو كردم :
اين متغير رو تعريف كردم :
و در رويداد enter نوشتم :
به خاطر رویداد Key Down یا Key Press هست اگر فقط روی Mouse Enter تنظیم کنید این مشکل براتون رفع میشه.
يه چيزي كه الان ديدم :
وقتي ازش اجرا ميگيرم كه همون انگليسي تايپ ميشه . بعد وقتي خودم زبان رو فارسي مي كنم ، فقط يك حرف رو فارسي مي نويسه و دوباره خودكار انگليسي اش مي كنه .
ببینید این برنامه 100% روی سیستم من کار میکنه . هیچ ایرادی هم توش نیست شما برنامه رو روی سیستم دیگه هم چک کنید ممکنه ایراد از زبان سیستم باشه.
اين PersianInput كلمه كليديه ؟
من هنوز جواب نگرفتم . ممكنه مربوط به زبان سيستمم باشه ؟
کمی تغییرات داشت ، انجام شد ، براتون ارسال کردم ، مخصوصاً زمانی که شما روی دکمه جدید ، ویرایش،جذف،جست و جو کلیک میکنید باید اون خطی که مربوط به تغییر کیبورد میشه رو در ابتدا داشته باشید.
كل كدهاي نوشته شده را گذاشتم .
كجاش اشتباست ؟
شک نکنید که یه جای کد شما میلنگه وگرنه همه چیز درسته چون من دارم خروجی میگیرم ازش یه جای دیگه آپلود کردم از لینک زیر اقدام به دانلود کنید.
دانلود فایل
منم براي همين رويداد بررسي كردم . ارور نميده . ولي تكست باكسي كه مي خوام فارسي بنويسه رو بدون هيچ تغييري ،همون انگليسي مي نويسه .
لينك دانلود هم باز نميشه به علت ترافيك سنگين .
ولي من بازم چك كردم ،همه چي رو سر جاي خودش نوشتم .