自定义一个控件继承基类usercontrol,但是不能输入中文

就为第个问题我花了很多的时间.搜索了许多的网站.都没有找到解决办法.
被逼无耐只好自已看源代码。还参考了MONO的源码。发现它们之间差别非常大。而且在VS里看看源码很困难,没有类查找功能。只能一个类文件一个类文件的打开看,想看看这个方法里边用的其它类只能一步步的跟。还是因为我没找到好的方法呢?最终我放弃了这个方法。我用了反编译软件Reflector.exe。这个软件查找很方便。只要点击就能找到你想看到的东西.我先找到了UserControl类,我随便看了一个,发现覆写了
WndProc

这里好像没什么重要的,我先点了this.WmSetFocus。然后点base.WndProc(ref m)。一下就跳到了基类
ContainerControl的

我再次点this.WmSetFocus,到达这个函数

这时看到了base.WmImeSetFocus(),我欣喜若狂.秘密一定在这里面.点击后到达了
Control.WmImeSetFocus().

接着再往下,

所有的秘密都再这里边了.得这些代码让我看傻眼。 我要怎么弄呢?MS的代码我不能改呀。要我重写一个类
似的类吗?天啊?里边用了那么多类,msdn里根本就找不到说明,对于我来说这太难了。这时就想放弃吧!
在这里折腾了好一会,反代码反复看了看。发现就两个属性决定了程序逻辑。this.CanEnableIme 和
this.ImeSupported。点开ImeSupported好像没什么。

再点CanEnableIme。惊喜!…………

既然是virtual,那个覆写试试。 在我自定义的类里加上了下面的代码

就这么简单。有效吗?我不知道。运行了现说吧!F5!程序起来了,赶紧打开输入法试试,看看能不能输中
文。啊!世界太美了!我终于成功了。

You Might Also Like
发表评论