VS2005中文輸入法自動轉換為全形的兩種解決方法

2022-08-14 05:33:15 字數 2440 閱讀 9172

最近在用vs2005做專案的時候,一直忍受著vs2005輸入法自動切換到全形的bug的作怪,一邊等待著微軟給我們乙個解決的方案。但是,我的專案都要作為產品打包出去了,微軟還是悶頭不對這個bug出乙個解決方法。怎麼辦?我可以忍受這個輸入法來回切換之苦,可使用者體驗可不會饒過我們的。弄不好,來個集體罷用,讓我們都到微軟喝西北風去啊!

總不能就這麼交出產品出去吧,只有自己動手了。下面我用兩種方法來實現如何避免輸入法的這個bug。

方法一:

form的pain和遍歷control的enter方法。

首先,我們為了使您原有的**更簡潔,我們把所要做的步驟封裝到乙個單獨的類中,類**如下:

1using system;

2using system.runtime.interopservices;

34namespace mydemo

527        //過載setime,傳入control

28        public static void setime(control ctl)

29       

32        //過載setime,傳入物件控制代碼

33        public static void setime(intptr handel)

34       

37        private static void changeallcontrol(control ctl)

38       

4546        static void frm_paint(object sender, painteventargs e)

47       

54        //控制項的enter處理程式

55        static void ctl_enter(object sender, eventargs e)

56       

59        private static void changecontrolime(object sender)

60       

64        //下面這個函式才是真正檢查輸入法的全形半形狀態

65        private static void changecontrolime(intptr h)

66       

78            }

79        }

80    }

81}有人問為什麼使用pain事件,而不用load事件或activated事件,我是基於下列考慮:

1、在您的form中,有些控制項可能是執行時動態新增的

2、在您的form中,使用到了非.net的ocx控制項

3、form呼叫子form的時候,activated事件根本不會觸發

使用這個類的方法為:

在您的介面中,在load的時候,在裡面加上這樣一句話:

clsime.setime(this);

方法二:

使用繼承的方法。

首先,建立乙個獨立的類如下:

1using system;

2using system.collections.generic;

3using system.componentmodel;

4using system.data;

5using system.collections;

6using system.drawing;

7using system.text;

8using system.windows.forms;

9using system.runtime.interopservices;

1011namespace mydemo

1242

43            }

44        }       

45    }

46}47

使用這個類的方法為:

修改所有的form的繼承關係,比如,你有這樣的乙個form類:

public partial class form1 :form

那麼,把它改成:

public partial class form1 :imeform

相信,這樣的修改會很快,全專案查詢替換一下即可。

記住,如果你的form是多重繼承下來的,例如:formc派生於formb,而formb又派生於forma,那麼,僅僅需要forma從imeform派生即可。

方法二的使用優勢是明顯的,把ime的事件從form最上一層就擷取了,避免了在您的form中控制項的多樣性所帶來的困擾。

還有,網上有一些說的調整imemode和使用imemodechanged方法來解決這個問題,建議你暫時(只是暫時)不要使用,因為修改imemode根本不能解決視窗切換時輸入法自動變全形的問題,而且imemodechanged是在imemode改變的時候才觸發,在使用者手工操作輸入法狀態改變時(比如按ctrl+shift)是不會觸發的。

Vs2005 中文輸入法全形問題 解決

用vs2005編輯text內容時,經常失去focus,再得到focus就會發現先前的輸入法變全形了.很不方便,即使用shift space來切換也只是臨時的辦法.後來發現只要是.net下寫的程式都有這個問題.太鬱悶了.幸好有高手寫了篇文章 vs2005中文輸入法自動轉換為全形的兩種解決方法 略微解決...

Ubuntu 12 04 中文輸入法

ubuntu 上的輸入法主要有小小輸入平台 支援拼音 二筆 五筆等 fcitx ibus scim 等。其中 scim 和ibus 是輸入法框架。在ubuntu 的中文系統中自帶了中文輸入法,通過 ctrl space 可切換中英文輸入法。這裡我們主要說下 ubuntu 英文系統中,中文輸入法的安裝...

rhel5 中文輸入法

1.小企鵝輸入法 fcitx 3.2.051108 fc4.noarch.rpm 舊 2.rpm ivh fcitx 3.2.051108 fc4.noarch.rpm 安裝完重啟,檢視是否有小企鵝輸入法面板 如果沒有在終端輸入f citx 3.不能輸入問題 編輯 etc x11 xinit xin...