關於WINFORM中IME的設定

來源:互聯網
上載者:User
在WINFORM中我們經常遇到文本輸入框中IME被禁用或老是變全形IME等問題,經查閱相關資料,現小結如下:

(一)Control.ImeMode 屬性:擷取或設定控制項的輸入法 (IME) 模式。 
(1)由於表單內容繼承關係,如果你的WINFORM表單中大部分需要設定為IME有效狀態,可以設定為FORM的ImeMode屬性為On.
(2)如果需要某些TextBox為IME有效,則使用ImeMode.On
(3)如果需要設定整個表單的IME全部為半形,可以使用以下代碼:
 #region 修正IME全形/半形的問題
        //聲明一些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);    
            //如果IME處於開啟狀態 
            if (ImmGetOpenStatus(HIme))
            {
                int iMode = 0;
                int iSentence = 0;
                //檢索IME資訊  
                bool bSuccess = ImmGetConversionStatus(HIme, ref   iMode, ref   iSentence);    
                if (bSuccess)
                {
                    //如果是全形,轉換成半形 
                    if ((iMode & IME_CMODE_FULLSHAPE) > 0)       
                        ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);       
                }

            }
        }
        #endregion 修正IME全形/半形的問題
注意:需要引用以下命名空間: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 使用描述單個字元或成組字元的基字元序列,以便允許您輸入範圍較廣的一組字元。基字元可以是來自朝鮮文音節的成分字母、日語漢字字元的拼音成分,或者中文字元的各種組合。

(三)如果設定為合適的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());
    }
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1665418

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.