[C#]半形/全形模式問題

在進入程式前,輸入法為半形,但是進入程式後,在TextBox輸入時,會自動切換到全形的問題

問題描述如下

在進入程式前,輸入法為半形,但是進入程式後,在TextBox輸入時,會自動切換到全形,請問這要如何去修正

這個問題可能在其他的輸入控制項也會發生,目前在 .NET Framework 2.0 與 4.0 有測試出相同的錯誤,想了解這個Bug的可以參考

http://www.blueshop.com.tw/board/show.asp?subcde=BRD20071219040639VKO

http://social.msdn.microsoft.com/forums/zh-TW/232/thread/54f6b359-e6c0-44f9-8750-0e442dbce451/

而這個問題可以藉由設定控制項的ImeMode(輸入法狀態)作解決
關於ImeMode的說明可以參考MSDN
http://msdn.microsoft.com/zh-tw/library/system.windows.forms.imemode(VS.80).aspx

不過直接從控制項中的ImeMode去設定,經過測試是沒有辦法直接設定為OnHalf
因此藉由當每次輸入法改變時,將ImeMode設定為OnHalf即可


程式碼 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


namespace WindowsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //當輸入法改變時,呼叫 languageChange
            this.InputLanguageChanged += new InputLanguageChangedEventHandler(languageChange);
        }


        private void languageChange(Object sender, InputLanguageChangedEventArgs e)
        {
            textBox1.ImeMode = System.Windows.Forms.ImeMode.OnHalf;  // 將控制項的ImeMode設為OnHalf
        }

    }

}

 
參考
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20090221181626FZK&fumcde=