小歐ou | 菜鳥自救會

努力工作,用心學習
文章數 - 1020, 回應數 - 998, 引用數 - 0

每月文章

技術社群

技術部落格

關於我

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

問題描述如下

在進入程式前,輸入法為半形,但是進入程式後,在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=
 



posted on 2009/2/23 14:14 我要推薦 | 閱讀數 : 20281 訂閱

關連文章

Feedback

# re: [C#]半形/全形模式問題 回覆

這樣寫會造成永遠切不成全型
2009/2/23 下午 03:34 | larrynung

# re: [C#]半形/全形模式問題 回覆

這部份我有想到過,因此並沒有去限制使用者只能輸入半形,

而是在使用者切換輸入法時,指定控制項一開始時輸入法為半形

謝謝您提出問題,也歡迎您在發問

2009/2/23 下午 03:43 | chou

# re: [C#]半形/全形模式問題 回覆

歐 看錯了 看成你是寫再ImeModeChanged事件
2009/2/23 下午 03:45 | larrynung

# re: [C#]半形/全形模式問題 回覆

只要再Form_Load事件或建構子寫上 textBox1.ImeMode = System.Windows.Forms.ImeMode.OnHalf; 就可以了
2009/2/23 下午 03:59 | larrynung

# re: [C#]半形/全形模式問題 回覆

To larrynung

您的作法是可行的,不過考慮程式內會有許多控制項,例如多個textbox都要做這處理的時候,獨立寫成一個函式去呼叫,可以使得 Form_Load 乾淨許多

謝謝您的指教

2009/2/23 下午 04:49 | chou

# re: [C#]半形/全形模式問題 回覆

To larrynung

假如只在Form_Load事件 textBox1.ImeMode = System.Windows.Forms.ImeMode.OnHalf;

只會在程式起始時執行,而我的程式碼可以偵測每一次使用者切換輸入法時,將之改為半形,我想還是有蠻大的差異

謝謝

2009/2/23 下午 04:58 | chou

# re: [C#]半形/全形模式問題 回覆

嗯嗯 有點不一樣 我以為只是要修正介面不能設定ImeMode的問題 因為發問者是問說輸入法會自動切換到全形 如果是沒設定ImeMode 預設是NoControl 測起來不會自動切到全型 可能是有設定了On Half 因為在我電腦設定了On Half的話 介面會變成On 跑起來就會自動切成全型 該問題看來應該是微軟的Bug吧 界面怎摸設定诶On Half都會被設成On
2009/2/23 下午 05:23 | larrynung

# re: [C#]半形/全形模式問題 回覆

您好,先謝謝您提供的語法,
想請問為何我在VS中沒有
System.Windows.Forms.ImeMode.OnHalf這個選項?
我的ImeMode只有System.Windows.Forms.ImeMode.On?
請問需要特別加入什麼參考之類的嗎?謝謝您!
2009/5/14 上午 11:35 | WL

# re: [C#]半形/全形模式問題 回覆

To WL

請問您使用的控制項是什麼 ? 這個問題好像是VS2005 的 bug , 可以安裝更新解決,不過我還是習慣用程式去克服

2009/5/14 下午 08:36 | chou

回應

標題
姓名
電子郵件 (將不會被顯示)
個人網頁
內容 
  登入後使用進階評論  
Please add 6 and 5 and type the answer here:

Powered by: