程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 在WinForm中屏蔽中文輸入法

在WinForm中屏蔽中文輸入法

編輯:關於.NET

在WinForm的開發中,有時有些特殊的要求。例如:在某個Form上徹底屏蔽中 文輸入法,使之不能切換到中文輸入,不能進行中文輸入。

這個問題看上去簡單,實現起來並沒有想象中的簡單。下面,把我做的幾個實 驗依次列舉,就會發現,其實實現起來還是有一定難度的。

實驗一:

1、新建項目,建立兩個Form,分別為Form1、Form2。Form1為啟動Form。

2、Form1上有一個TextBox和Button。

點擊Button,執行下面語句

Me.Hide()

Form2.Show()

3、Form2上有一個TextBox,TextBox的ImeMode屬性設為close,意思為關閉輸 入法模式。

在Form2的FormClosed事件中執行下面語句。

Form1.Show()

好,現在來測試這個實驗。嗯,很不幸,在Form2中TextBox中很順利的切換了 中文輸入法,輸入了中文。試驗失敗。

實驗二:

繼續實驗一,找了相關的資料,發現有一個InputLanguageChanging事件,似 乎可以控制輸入法的切換。

4、在Form2的TextBox的InputLanguageChanging事件中添加如下代碼

e.Cancel = True

來測試一下。貌似試驗成功了,按照實驗一的測試,在Form2中TextBox已經不 能切換輸入法了。

為何是貌似呢?我們再重新測試一番,就有問題了。

先在Form1中的TextBox中切換成中文輸入法。然後點擊Button,切換到Form2 ,你再Ctrl+Space,發現在Form2中的TextBox裡出現了熟悉的中文輸入法。呵呵 ,實驗二不能算成功的。

分析實驗二為何不能成功。我想關鍵就是在切換到Form2之前,我就已經切換 成中文輸入法。那如果在切換Form2之前就把輸入法釘死在系統的默認輸入法如何 ?

實驗三:

1、先在Form1中添加如下代碼

    Private Sub SetDefaultInputLanguage()
       InputLanguage.CurrentInputLanguage =  InputLanguage.DefaultInputLanguage
     End Sub

2、點擊Form1的Button,執行下面語句

Call SetDefaultInputLanguage()

Me.Hide()

Form2.Show()

嗯,測試一下,這次成功了。就算能用鼠標在Form2中TextBox更改輸入法,可 是TextBox中仍然只能用英文輸入。

把上面的三個實驗總結一下。要想在WinForm中屏蔽輸入法。三個要素:

1、TextBox的ImeMode為Close

2、在TextBox的InputLanguageChanging事件中添加e.Cancel = True

3、在切換到當前Form之前要切換到默認輸入法

InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage

備注:

這次三個實驗比較順利。之前在做實驗的時候還碰到奇怪的地方,導致試驗失 敗,後來想想,可能是微軟輸入法的原因,這次實驗時用的是微軟2007輸入法, 之前的實驗用的是微軟2003輸入法。

我把之前實驗奇怪的地方也書寫下來,並給出解決的方法。和各位網友交流。

1、如果內存中有兩個Form的實例,實驗不會成功。

解決辦法是:將Me.Hide改為Me.Close。在內存中只保留一個Form    

2、如果系統有微軟2003輸入法,並且在Form1中的TextBox就切換成微軟輸入 法,實驗也不會成功。

解決辦法是:先切換為第一個不是微軟輸入法的中文輸入法,再切換為默認輸 入法。代碼如下:

Private Sub SetDefaultInputLanguage()
       Dim i As Integer, j As Integer
       j = 0
       For i = 1 To  InputLanguage.InstalledInputLanguages.Count - 1
         If InputLanguage.InstalledInputLanguages (i).LayoutName.IndexOf("微軟") < 0 Then
           j = i
           Exit For
         End If
       Next
       InputLanguage.CurrentInputLanguage =  InputLanguage.InstalledInputLanguages(j)
       InputLanguage.CurrentInputLanguage =  InputLanguage.DefaultInputLanguage
     End Sub

為何是這樣,我不知道,我是碰到這個情況,並反復試驗才得出的解決方案。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved