键盘输入语言改变程序

时间:2016-01-24 09:03:45

标签: vb.net

我发现一些用C#编写的代码用于以编程方式更改输入语言。我改编了vb.net的代码。但它没有用。由于我是编程新手,我无法找出我的错。请帮我。提前致谢。

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing

Namespace InputLanguagetrial
    Public Class Form1
        Dim _bengaliInput As InputLanguage
        Dim _englishInput As InputLanguage


        Public Sub New()
            _bengaliInput = GetInputLanguageByName("bengali")
            _englishInput = GetInputLanguageByName("english")
        End Sub

        Public Sub SetKeyboardLayout(ByVal layout As InputLanguage)
            InputLanguage.CurrentInputLanguage = layout
        End Sub


        Public Shared Function GetInputLanguageByName(ByVal inputName As     String) As InputLanguage
            Dim lang As InputLanguage
            For Each lang In InputLanguage.InstalledInputLanguages
                If   lang.Culture.EnglishName.ToLower().StartsWith(inputName) Then
                    Return lang
                End If
            Next
            Return Nothing
        End Function

        Public Sub LoadBengaliKeyboardLayout()
            If Not _bengaliInput Is Nothing Then
                InputLanguage.CurrentInputLanguage = _bengaliInput
            Else
                InputLanguage.CurrentInputLanguage =     InputLanguage.DefaultInputLanguage
            End If
        End Sub

        Public Sub LoadEnglishKeyboardLayout()
            If Not _englishInput Is Nothing Then
              InputLanguage.CurrentInputLanguage = _englishInput
            Else
                InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage
            End If
        End Sub

        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            InputLanguage.CurrentInputLanguage = _bengaliInput
        End Sub

        Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        InputLanguage.CurrentInputLanguage = _englishInput
        End Sub

    End Class
End Namespace

2 个答案:

答案 0 :(得分:2)

在C#和VB.Net之间转换某些代码时,可能需要进行一些更改

  • 移除New子广告并将其代码添加到“Form_Load”活动中。
  • 将“TextBox_TextChanged”事件更改为“TextBox_GotFocus”会为您提供更好的结果(一旦光标移动到TextBox,语言就会改变)。

<强>这里:

Public Class Form1

    Dim _bengaliInput As InputLanguage
    Dim _englishInput As InputLanguage

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        _bengaliInput = GetInputLanguageByName("bengali")
        _englishInput = GetInputLanguageByName("english")
    End Sub

    Public Sub SetKeyboardLayout(ByVal layout As InputLanguage)
        InputLanguage.CurrentInputLanguage = layout
    End Sub

    Public Shared Function GetInputLanguageByName(ByVal inputName As String) As InputLanguage
        Dim lang As InputLanguage
        For Each lang In InputLanguage.InstalledInputLanguages
            If lang.Culture.EnglishName.ToLower().StartsWith(inputName) Then
                Return lang
            End If
        Next
        Return Nothing
    End Function

    Public Sub LoadBengaliKeyboardLayout()
        If Not _bengaliInput Is Nothing Then
            InputLanguage.CurrentInputLanguage = _bengaliInput
        Else
            InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage
        End If
    End Sub

    Public Sub LoadEnglishKeyboardLayout()
        If Not _englishInput Is Nothing Then
            InputLanguage.CurrentInputLanguage = _englishInput
        Else
            InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage
        End If
    End Sub

    Private Sub TextBox1_GotFocus(sender As Object, e As System.EventArgs) Handles TextBox1.GotFocus
        InputLanguage.CurrentInputLanguage = _bengaliInput
    End Sub

    Private Sub TextBox2_GotFocus(sender As Object, e As System.EventArgs) Handles TextBox2.GotFocus
        InputLanguage.CurrentInputLanguage = _englishInput
    End Sub

End Class

希望有所帮助:)

修改

当然,您需要在Windows设置中添加孟加拉语键盘才能使此代码正常工作:

enter image description here

答案 1 :(得分:0)

如果在操作系统(Windows)中必须拖曳输入语言,则必须将其作为默认语言。例如,如果您将英语输入语言作为默认输入语言并将阿拉伯语输入语言作为第二输入语言。

您可以通过以下代码使用F1,F2键在拖车输入语言之间进行切换:

Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.F1 Then  
         ' for English language
         InputLanguage.CurrentInputLanguage =nputLanguage.InstalledInputLanguages(0)
    elseif e.KeyCode= Keys.F2 Then
         ' for Arabic language
         InputLanguage.CurrentInputLanguage =nputLanguage.InstalledInputLanguages(1)
    End If
End Sub