本文實例講述了C#中Winfrom默認輸入法的設置方法。分享給大家供大家參考。具體分析如下:
在WINFORM中我們經常遇到文本輸入框中輸入法被禁用或老是變全角輸入法等問題,經查閱相關資料,現小結如下:
一、Control.ImeMode 屬性:獲取或設置控件的輸入法編輯器 (IME) 模式。
(1)由于窗體屬性繼承關系,如果你的WINFORM窗體中大部分需要設置為輸入法有效狀態,可以設置為FORM的ImeMode屬性為On.
(2)如果需要某些TextBox為輸入法有效,則使用ImeMode.On
(3)如果需要設置整個窗體的輸入法全部為半角,可以使用以下代碼:
#region 修正輸入法全角/半角的問題//聲明一些API函數 [DllImport("imm32.dll")]public static extern IntPtr ImmGetContext(IntPtr hwnd);[DllImport("imm32.dll")]public static extern bool ImmGetOpenStatus(IntPtr himc);[DllImport("imm32.dll")]public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);[DllImport("imm32.dll")]public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref  int lpdw2);[DllImport("imm32.dll")]public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);private const int IME_CMODE_FULLSHAPE = 0x8;private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;protected override void OnActivated(EventArgs e){  base.OnActivated(e);  IntPtr HIme = ImmGetContext(this.Handle);    //如果輸入法處于打開狀態   if (ImmGetOpenStatus(HIme))  {    int iMode = 0;    int iSentence = 0;    //檢索輸入法信息     bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);      if (bSuccess)    {      //如果是全角,轉換成半角       if ((iMode & IME_CMODE_FULLSHAPE) > 0)            ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);        }  }}#endregion 修正輸入法全角/半角的問題注意:需要引用以下命名空間:using System.Runtime.InteropServices;
(4)對于僅用于輸入數值的 TextBox 控件,ImeMode 屬性通常設置為 ImeMode.Off。對于 Form 類,ImeMode 屬性值設置為 ImeMode.NoControl。
(5)不直接支持輸入方法編輯器或允許從 IME 直接輸入的大多數類將此屬性的值設置為 NoControl。
重要事項:
除非 ImeMode 已經以編程方式設置為 ImeMode.Disable,否則用戶能夠以交互方式更改它。在前一種情況下,用戶將無法使用 IME。
二、ImeMode各屬性的含義:
ImeMode 枚舉:指定一個值,該值是用來確定在選定了對象時該對象的輸入法編輯器 (IME) 的狀態。
以下是微軟的解釋:
|  | 成員名稱 | 說明 | 
|---|---|---|
| Alpha | 字母數字單字節字符 (SBC)。此設置僅對朝鮮語和日語 IME 有效。 | |
| AlphaFull | 字母數字雙字節字符。此設置僅對朝鮮語和日語 IME 有效。 | |
| Close |  | |
| Disable | IME 被禁用。如果使用此設置,則用戶無法從鍵盤打開 IME,而且 IME 浮動窗口處于隱藏狀態。 | |
| Hangul | 朝鮮文 SBC。此設置僅對朝鮮語 IME 有效。 | |
| HangulFull | 朝鮮文 DBC。此設置僅對朝鮮語 IME 有效。 | |
| Hiragana | 平假名 DBC。此設置僅對日語 IME 有效。 | |
| Inherit | 繼承父控件的 IME 模式。 | |
| Katakana | 片假名 DBC。此設置僅對日語 IME 有效。 | |
| KatakanaHalf | 片假名 SBC。此設置僅對日語 IME 有效。 | |
| NoControl | 無(默認)。 | |
| Off | IME 已關閉。此模式指示 IME 已關閉,這意味著該對象的行為方式與英語輸入模式相同。此設置僅對日語、簡體中文和繁體中文 IME 有效。 | |
| On | IME 已打開。此值指示 IME 已打開,可以輸入中文或日語特定的字符。此設置僅對日語、簡體中文和繁體中文 IME 有效。 | 
輸入法編輯器 (IME) 允許用戶輸入和編輯中文、日語和朝鮮語字符。IME 是用于編寫中文、日語和朝鮮語腳本的基本組件。這些書寫體系具有的字符比可為常規鍵盤編碼的字符要多。這些語言的 IME 使用描述單個字符或成組字符的基字符序列,以便允許您輸入范圍較廣的一組字符。基字符可以是來自朝鮮文音節的成分字母、日語漢字字符的拼音成分,或者中文字符的各種組合。
三、如果設置為合適的輸入法?
這里僅給一個例子,打擊可以舉一返三:
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;public class Form1 : System.Windows.Forms.Form{  RichTextBox rtb = new RichTextBox();  public Form1()  {    this.Controls.Add(rtb);    rtb.Dock = DockStyle.Fill;    this.InputLanguageChanged += new InputLanguageChangedEventHandler(languageChange);  }  private void languageChange(Object sender, InputLanguageChangedEventArgs e)  {    // If the input language is Japanese, set the initial IMEMode to Katakana.    if (e.InputLanguage.Culture.TwoLetterISOLanguageName.Equals("ja"))    {      rtb.ImeMode = System.Windows.Forms.ImeMode.Katakana;    }  }  public static void Main(string[] args)  {    Application.Run(new Form1());  }}希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答