在 WinForm中屏蔽中文输入法

在WinForm的开发中,有时有些特殊的要求。例如:在某个Form上彻底屏蔽中文输入法,使之不能切换到中文输入,不能进行中文输入。

  这个问题看上去简单,实现起来并没有想象中的简单。下面,把我做的几个实验依次列举,就会发现,其实实现起来还是有一定难度的。

  实验一:

  1、新建项目,建立两个Form,分别为Form1、Form2。Form1为启动Form。

  2、Form1上有一个TextBox和Button。

  点击Button,执行下面语句
  1.           Me.Hide()

  2.           Form2.Show()
复制代码
3、Form2上有一个TextBox,TextBox的ImeMode属性设为close,意思为关闭输入法模式。

  在Form2的FormClosed事件中执行下面语句。
  1. Form1.Show()
复制代码
好,现在来 测试这个实验。嗯,很不幸,在Form2中TextBox中很顺利的切换了中文输入法,输入了中文。试验失败。

   实验二:

  继续实验一,找了相关的资料,发现有一个InputLanguageChanging事件,似乎可以控制输入法的切换。

  4、在Form2的TextBox的InputLanguageChanging事件中添加如下代码
  1. e.Cancel = True
复制代码
来测试一下。貌似试验成功了,按照实验一的测试,在Form2中TextBox已经不能切换输入法了。

  为何是貌似呢?我们再重新测试一番,就有问题了。

  先在Form1中的TextBox中切换成中文输入法。然后点击Button,切换到Form2,你再Ctrl+Space,发现在 Form2中的TextBox里出现了熟悉的中文输入法。呵呵,实验二不能算成功的。

  分析实验二为何不能成功。我想关键就是在切换到Form2之前,我就已经切换成中文输入法。那如果在切换Form2之前就把输入法钉死在系统的默认输入法如何?

   实验三:

  1、先在Form1中添加如下代码
  1.     Private Sub SetDefaultInputLanguage()

  2.       InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage

  3.     End Sub
复制代码
2、点击Form1的Button,执行下面语句
  1.     Call SetDefaultInputLanguage()

  2.     Me.Hide()

  3.     Form2.Show()
复制代码
嗯,测试一下,这次成功了。就算能用鼠标在Form2中TextBox更改输入法,可是TextBox中仍然只能用英文输入。

  把上面的三个实验总结一下。要想在WinForm中屏蔽输入法。三个要素:

  1、TextBox的ImeMode为Close

  2、在TextBox的InputLanguageChanging事件中添加e.Cancel = True

  3、在切换到当前Form之前要切换到默认输入法
  1.     InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage
复制代码
备注:

  这次三个实验比较顺利。之前在做实验的时候还碰到奇怪的地方,导致试验失败,后来想想,可能是微软输入法的原因,这次实验时用的是微软 2007输入法,之前的实验用的是微软2003输入法。

  我把之前实验奇怪的地方也书写下来,并给出解决的方法。和各位网友交流。

  1、如果内存中有两个Form的实例,实验不会成功。

  解决办法是:将Me.Hide改为Me.Close。在内存中只保留一个Form    

  2、如果系统有微软2003输入法,并且在Form1中的TextBox就切换成微软输入法,实验也不会成功。

  解决办法是:先切换为第一个不是微软输入法的中文输入法,再切换为默认输入法。代码如下:
  1.     Private Sub SetDefaultInputLanguage()

  2.       Dim i As Integer, j As Integer

  3.       j = 0

  4.       For i = 1 To InputLanguage.InstalledInputLanguages.Count - 1

  5.         If InputLanguage.InstalledInputLanguages(i).LayoutName.IndexOf("微软") < 0 Then

  6.           j = i

  7.           Exit For

  8.         End If

  9.       Next

  10.       InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages(j)

  11.       InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage

  12.     End Sub
复制代码
为何是这样,我不知道,我是碰到这个情况,并反复试验才得出的解决方案
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值