در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

تغییر اوتوماتیک زبان کیبورد در Text Box ویژوال بیسیک

اگر طراحی برنامه ای را در دست دارید و تمایل دارید مقادیری که کاربران در برنامه وارد میکنند به دلخواه شما یا به عبارتی دیگر راحتی کار را برای کاربران بخواهید یکی از این راه ها استفاده از تغییرات اتوماتیک مقادیر در 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 ویژوال بیسیک

کد های زیر به ترتیب برای 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

تصویر زیر نمونه ای کامل از این کد هست :

تغییر اوتوماتیک زبان کیبورد در Text Box ویژوال بیسیک

    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

نویسنده : فرهاد خانلری

منبع : انجمن تخصصی فناوری اطلاعات ایران

کپی برداری با ذکر نام نویسنده و منبع مجاز خواهد بود

#تغییر_زیان_کیبورد_در_برنامه_نویسی #پس_از_وارد_شدن_به_text_box_زبان_عوض_شود #تغییر_زبان_کیبورد_در_text_box #کد_تغییر_زبان_کیبورد_در_ویژوال_بیسیک
13 نظر
شكوفه

يه سوال دارم :

اگه ميشه يه كم توضيح بديد كه حلقه for‌چي كار ميكنه ؟

بعدشم من تمام كدهايي كه شما نوشتيد رو نوشتم .اما جواب بهم نميده . يعني بازم داخل تكست باكس انگليسي تايپ ميكنه . چرا ؟

فرهاد خانلری

برنامه فوق رو براتون اپلود کردم که میتونید از لینک زیر دانلود کنید و استفاده کنید ، ممکنه کد ها رو دقیقاً جای خودشون ننوشته باشید مثلاً Imports System.Globalization رو باید در بالاترین جای صفحه یعنی General قرار دهید ، هرچند اگر ارور مورد نظر رو میدادید بهتر میشد نظر داد ولی به هر حال شما میتوند از لینک زیر برنامه رو دریافت کنید.

دانلود فایل

در خصوص تکه کدی که در قسمت Load برنامه نوشته میشه باید بگم در ابتدا یک مقدار اولیه به PersianInput و EnglishInput داده میشه و سپس قسمت For به بعد چک میکند زبانهایی که قصد داریم انتخاب کنیم روی سیستم کاربر نصب هست یا خیر و اگر آن زبان در سیستم بود از آن زبان ها استفاده میکند.

فرهاد خانلری

ضمناً یادتون باشه من این برنامه رو در رویداد MouseEnter نوشتم یعنی وقتی با موس کلیک میکنی روی Text Box زبا اتوماتیک تغییر میکنه وقتی با tab بری روی Text Box عمل نمیکنه چون رویدادش رو براش ننوشتم کلاً اگر بخواهید تمام رویداد ها رو (اونایی که مربوط میشه به برنامه و کاربر) میتونید هر کدوم از رویداد ها رو دابل کلیک کنی تا بتونی تو برنامه ات یک خط کد زیر رو برای زبان فارسی یا انگلیسی بنویسی.

مثلاً برای زبان فارسی در رویداد MouseEnter روی Text Box اول این تکه کد رو میزاری

 InputLanguage.CurrentInputLanguage = PersianInput

و برای زبان انگلیسی در رویداد MouseEnter روی Text Box دوم این تکه کد رو میزاری

InputLanguage.CurrentInputLanguage = EnglishInput
شكوفه

منم براي همين رويداد بررسي كردم . ارور نميده . ولي تكست باكسي كه مي خوام فارسي بنويسه رو بدون هيچ تغييري ،‌همون انگليسي مي نويسه .

لينك دانلود هم باز نميشه به علت ترافيك سنگين .

ولي من بازم چك كردم ،‌همه چي رو سر جاي خودش نوشتم .

فرهاد خانلری

شک نکنید که یه جای کد شما میلنگه وگرنه همه چیز درسته چون من دارم خروجی میگیرم ازش یه جای دیگه آپلود کردم از لینک زیر اقدام به دانلود کنید.

دانلود فایل

شكوفه

Imports System.Globalization
Public Class Form1

    Private jadid As Boolean = False
    Private virayesh As Boolean = False
    Private phoneid As Integer
    Private hazf As Boolean = False

    Private persianinput As InputLanguage
    Private englishinput As InputLanguage

    Private Sub frm_telbook_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Tb_phoneTableAdapter1.Fill(PhonebookDataSet1.tb_phone)

        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("farsi") = 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 btn_new_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_new.Click

        txt_name.Clear()
        txt_family.Clear()
        txt_company.Clear()
        txt_mobile.Clear()
        txt_tel.Clear()
        txt_address.Clear()

        groupBox1.Enabled = True
        DataGridView1.Enabled = True
        txt_name.Focus()
        jadid = True
        btn_edit.Enabled = False
        btn_del.Enabled = False
        btn_save.Enabled = True
        btn_save.Text = "جديد "





    End Sub
    Private Sub btn_edit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_edit.Click

        groupBox1.Enabled = True
        DataGridView1.Enabled = True
        txt_name.Focus()
        virayesh = True
        btn_new.Enabled = False
        btn_del.Enabled = False
        btn_save.Enabled = True
        btn_save.Text = "ويرايش"
        txt_name.Clear()
        txt_family.Clear()
        txt_company.Clear()
        txt_mobile.Clear()
        txt_tel.Clear()
        txt_address.Clear()

    End Sub
    Private Sub DataGridView1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick
        If DataGridView1.Rows.Count > 0 Then
            txt_name.Text = DataGridView1.CurrentRow.Cells("tname").Value.ToString
            txt_family.Text = DataGridView1.CurrentRow.Cells("tfamily").Value.ToString
            txt_company.Text = DataGridView1.CurrentRow.Cells("tcompany").Value.ToString
            txt_mobile.Text = DataGridView1.CurrentRow.Cells("tmobile").Value.ToString
            txt_tel.Text = DataGridView1.CurrentRow.Cells("ttel").Value.ToString
            txt_address.Text = DataGridView1.CurrentRow.Cells("temail").Value.ToString
            phoneid = CInt(DataGridView1.CurrentRow.Cells("tid").Value)


        End If
    End Sub
    Private Sub btn_del_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_del.Click

        groupBox1.Enabled = True
        DataGridView1.Enabled = True
        btn_save.Enabled = True
        btn_save.Text = "حذف"
        hazf = True
        btn_edit.Enabled = False
        btn_new.Enabled = False

        txt_name.Clear()
        txt_family.Clear()
        txt_company.Clear()
        txt_mobile.Clear()
        txt_tel.Clear()
        txt_address.Clear()




    End Sub
    Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_save.Click


        If jadid Or virayesh Then


            If (String.IsNullOrEmpty(txt_name.Text.Trim())) Or (String.IsNullOrEmpty(txt_family.Text())) Then
                MessageBox.Show("لطفا اطلاعات را كامل كنيد . ")

            ElseIf jadid Then

                Tb_phoneTableAdapter1.Insert(txt_name.Text, txt_family.Text, txt_company.Text, txt_mobile.Text, txt_tel.Text, txt_address.Text)
                MessageBox.Show("اطلاعات وارد شد ")
                Tb_phoneTableAdapter1.Fill(PhonebookDataSet1.tb_phone)
                groupBox1.Enabled = False
                DataGridView1.Enabled = False
                jadid = False
                btn_save.Enabled = False
                btn_edit.Enabled = True
                btn_del.Enabled = True
                btn_save.Text = "ذخيره تغييرات "

            Else
                Tb_phoneTableAdapter1.UpdateQuery(txt_name.Text, txt_family.Text, txt_company.Text, txt_mobile.Text, txt_tel.Text, txt_address.Text, phoneid)
                MessageBox.Show("اطلاعات ويرايش شد .")
                virayesh = False
                Tb_phoneTableAdapter1.Fill(PhonebookDataSet1.tb_phone)
                groupBox1.Enabled = False
                DataGridView1.Enabled = False
                btn_save.Enabled = False
                btn_new.Enabled = True
                btn_del.Enabled = True
                btn_save.Text = "ذخيره تغييرات "


            End If
        ElseIf hazf Then
            If DataGridView1.Rows.Count > 0 Then

                If MessageBox.Show("آيا براي حذف مطمئن هستيد ؟", "حذف اطلاعات", MessageBoxButtons.YesNo) = DialogResult.Yes Then

                    phoneid = CInt(DataGridView1.CurrentRow.Cells("tid").Value)
                    Tb_phoneTableAdapter1.DeleteQuery(phoneid)
                    Tb_phoneTableAdapter1.Fill(PhonebookDataSet1.tb_phone)
                    btn_new.Enabled = True
                    btn_edit.Enabled = True
                    btn_save.Enabled = True
                    groupBox1.Enabled = False
                    DataGridView1.Enabled = False

                    txt_name.Clear()
                    txt_family.Clear()
                    txt_company.Clear()
                    txt_mobile.Clear()
                    txt_tel.Clear()
                    txt_address.Clear()


                End If


            End If


        End If

    End Sub
    Private Sub btn_serch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_serch.Click
        btn_del.Enabled = False
        btn_new.Enabled = False
        btn_edit.Enabled = False
        groupBox1.Enabled = True
        txt_name.Focus()


    End Sub
    Private Sub txt_family_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_family.TextChanged
        Tb_phoneTableAdapter1.FillBy(PhonebookDataSet1.tb_phone, txt_family.Text + "%")

    End Sub

    Private Sub txt_name_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_name.TextChanged
        Tb_phoneTableAdapter1.FillBy1(PhonebookDataSet1.tb_phone, txt_name.Text + "%")

    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Close()

    End Sub
    Private Sub btn_cancell_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancell.Click
        btn_new.Enabled = True
        btn_edit.Enabled = True
        btn_del.Enabled = True

        jadid = False
        virayesh = False
        hazf = False

        txt_name.Clear()
        txt_family.Clear()
        txt_company.Clear()
        txt_mobile.Clear()
        txt_tel.Clear()
        txt_address.Clear()

    End Sub

    Private Sub txt_name_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_name.MouseEnter
        InputLanguage.CurrentInputLanguage = persianinput
    End Sub

    Private Sub txt_address_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_address.TextChanged
        InputLanguage.CurrentInputLanguage = englishinput
    End Sub

    
    Private Sub txt_name_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_name.KeyDown
        InputLanguage.CurrentInputLanguage = persianinput
    End Sub
End Class



شكوفه

كل كدهاي نوشته شده را گذاشتم .

كجاش اشتباست ؟

فرهاد خانلری

کمی تغییرات داشت ، انجام شد ، براتون ارسال کردم ، مخصوصاً زمانی که شما روی دکمه جدید ، ویرایش،جذف،جست و جو کلیک میکنید باید اون خطی که مربوط به تغییر کیبورد میشه رو در ابتدا داشته باشید.

شكوفه

اين PersianInput كلمه كليديه ؟

من هنوز جواب نگرفتم . ممكنه مربوط به زبان سيستمم باشه ؟

فرهاد خانلری

ببینید این برنامه 100% روی سیستم من کار میکنه . هیچ ایرادی هم توش نیست شما برنامه رو روی سیستم دیگه هم چک کنید ممکنه ایراد از زبان سیستم باشه.

شكوفه

يه چيزي كه الان ديدم :

وقتي ازش اجرا ميگيرم كه همون انگليسي تايپ ميشه . بعد وقتي خودم زبان رو فارسي مي كنم ، فقط يك حرف رو فارسي مي نويسه و دوباره خودكار انگليسي اش مي كنه .

فرهاد خانلری

به خاطر رویداد Key Down یا Key Press هست اگر فقط روی Mouse Enter تنظیم کنید این مشکل براتون رفع میشه.

شكوفه

من با اين كد تونستم جواب بگيرم :

Private Sub txt_name_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles txt_name.MouseClick
        Dim myCulture As New Globalization.CultureInfo("fa-IR")
        InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(myCulture)
    End Sub

كه كلا زبان سيستم فارسي شد .

بعدش براي اينكه تكست باكس ايميل ،‌انگلسي تايپ بشه اين كارو كردم :

اين متغير رو تعريف كردم :

  Private englishinput As InputLanguage

و در رويداد enter نوشتم :

Private Sub txt_address_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_address.Enter
        InputLanguage.CurrentInputLanguage = englishinput
    End Sub
نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....