ASP.NET2.0 數(shù)據(jù)綁定函數(shù)Eval()的機(jī)制
2006/12/29 18:42:19
最近在用VS2005做項(xiàng)目的時(shí)候,一直忍受著VS2005輸入法自動(dòng)切換到全角的Bug的作怪,一邊等待著微軟給我們一個(gè)解決的方案。但是,我的項(xiàng)目都要作為產(chǎn)品打包出去了,微軟還是悶頭不對(duì)這個(gè)Bug出一個(gè)解決方法。怎么辦?我可以忍受這個(gè)輸入法來回切換之苦,可用戶體驗(yàn)可不會(huì)饒過我們的。弄不好,來個(gè)集體罷用,讓我們都到微軟喝西北風(fēng)去啊!

  總不能就這么交出產(chǎn)品出去吧,只有自己動(dòng)手了。下面我用兩種方法來實(shí)現(xiàn)如何避免輸入法的這個(gè)Bug。

  方法一:

  Form的Pain和遍歷Control的Enter方法。

  首先,我們?yōu)榱耸鼓械拇a更簡潔,我們把所要做的步驟封裝到一個(gè)單獨(dú)的類中,類代碼如下:

    1using System;
2using System.Runtime.InteropServices;
3
4namespace MyDemo
5{
6 public static class clsIme
7 {
8 //聲明一些API函數(shù)
9 [DllImport("imm32.dll")]
10 public static extern IntPtr ImmGetContext(IntPtr hwnd);
11 [DllImport("imm32.dll")]
12 public static extern bool ImmGetOpenStatus(IntPtr himc);
13 [DllImport("imm32.dll")]
14 public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
15 [DllImport("imm32.dll")]
16 public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
17 [DllImport("imm32.dll")]
18 public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
19 public const int IME_CMODE_FULLSHAPE = 0x8;
20 public const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
21 //重載SetIme,傳入Form
22 public static void SetIme(Form frm)
23 {
24 frm.Paint += new PaintEventHandler(frm_Paint);
25 ChangeAllControl(frm);
26 }
27 //重載SetIme,傳入Control
28 public static void SetIme(Control ctl)
29 {
30 ChangeAllControl(ctl);
31 }
32 //重載SetIme,傳入對(duì)象句柄
33 public static void SetIme(IntPtr Handel)
34 {
35 ChangeControlIme(Handel);
36 }
37 private static void ChangeAllControl(Control ctl)
38 {
39 //在控件的的Enter事件中觸發(fā)來調(diào)整輸入法狀態(tài)
40 ctl.Enter += new EventHandler(ctl_Enter);
41 //遍歷子控件,使每個(gè)控件都用上Enter的委托處理
42 foreach (Control ctlChild in ctl.Controls)
43 ChangeAllControl(ctlChild);
44 }
45
46 static void frm_Paint(object sender, PaintEventArgs e)
47 {
48 /**//*有人問為什么使用Pain事件,而不用Load事件或Activated事件,是基于下列考慮:
49 * 1、在您的Form中,有些控件可能是運(yùn)行時(shí)動(dòng)態(tài)添加的
50 * 2、在您的Form中,使用到了非.NET的OCX控件
51 * 3、Form調(diào)用子Form的時(shí)候,Activated事件根本不會(huì)觸發(fā) */
52 ChangeControlIme(sender);
53 }
54 //控件的Enter處理程序
55 static void ctl_Enter(object sender, EventArgs e)
56 {
57 ChangeControlIme(sender);
58 }
59 private static void ChangeControlIme(object sender)
60 {
61 Control ctl = (Control)sender;
62 ChangeControlIme(ctl.Handle);
63 }
64 //下面這個(gè)函數(shù)才是真正檢查輸入法的全角半角狀態(tài)
65 private static void ChangeControlIme(IntPtr h)
66 {
67 IntPtr HIme = ImmGetContext(h);
68 if (ImmGetOpenStatus(HIme)) //如果輸入法處于打開狀態(tài)
69 {
70 int iMode = 0;
71 int iSentence = 0;
72 bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence); //檢索輸入法信息
73 if (bSuccess)
74 {
75 if ((iMode & IME_CMODE_FULLSHAPE) > 0) //如果是全角
76 ImmSimulateHotKey(h, IME_CHOTKEY_SHAPE_TOGGLE); //

下一頁
返回列表
返回首頁 主站蜘蛛池模板: mm1313亚洲国产精品美女| 亚洲无限乱码一二三四区| 黄瓜视频在线播放| 国产麻豆成人传媒免费观看| 一级做α爱过程免费视频| 日本不卡一区二区三区最新| 亚洲av无码片区一区二区三区| 波多野结衣无内裤护士| 北条麻妃在线一区二区| 色欲欲WWW成人网站| 国产成a人亚洲精v品无码 | 午夜影院免费观看| 边吃奶边扎下很爽视频| 国产欧美在线观看一区| 3d动漫精品啪啪一区二区免费| 天堂网www资源在线| 一本久久精品一区二区| 无人高清视频免费观看在线动漫| 在线天堂中文www官网| 亚洲AV无码成人黄网站在线观看| 欧美日韩一级片在线观看| 亚洲视频www| 福利一区二区视频| 又大又硬又爽免费视频| 被三个男人绑着躁我好爽视频| 国产成人精品一区二区三区| caoporn97在线视频进入| 国产精品视频2020| 97福利视频精品第一导航 | 天堂在线免费观看中文版| 一本大道无码人妻精品专区| 成人精品一区二区久久| 久久99精品久久久久久园产越南| 日韩中文字幕在线一区二区三区| 五月婷婷免费视频| 欧美中文字幕在线| 亚洲国产av高清无码| 欧美日韩大片在线观看| 亚洲欧美日韩久久精品第一区| 波多野结衣教师未删减版| 人人狠狠综合久久亚洲|