看了一些控制输入法的文章,但所有的都不是最终的解决办法。列举缺点如下:
1、设置ImeMode属性。当2次CTRL+SPACE时,输入法可用。
2、使用InputLanguage控制,但鼠标右键的弹出菜单的“粘贴”还可用。
3、使用InputLanguage控制,意味着键盘的剪切复制功能丢失了。(我在KeyDown中处理)
我觉得ImeMode是微软的BUG,所以想绕过去就会困难一些,也要牺牲部分功能。
我想问的是:
1、有更好的解决办法吗?
2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。
5 个解决方案
#1
To 2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。
让TextBox绑定一个没有子项的ContextMenu
让TextBox绑定一个没有子项的ContextMenu
#2
使用keypress控制只能输入字母,不要去管imemode
#3
补充说明一下。有系统弹出菜单就意味着能使用“粘贴”,粘贴的内容可能是中文的。
#4
if(Clipboard.GetDataObject() != null)
Clipboard.SetDataObject(new object());
if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage)
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
在KEYDOWN事件中。
然后设置ContextMenu为一个没有子项的ContextMenu。
问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。
Clipboard.SetDataObject(new object());
if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage)
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
在KEYDOWN事件中。
然后设置ContextMenu为一个没有子项的ContextMenu。
问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。
#5
那就自己做个菜单,只有剪切和复制。
#1
To 2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。
让TextBox绑定一个没有子项的ContextMenu
让TextBox绑定一个没有子项的ContextMenu
#2
使用keypress控制只能输入字母,不要去管imemode
#3
补充说明一下。有系统弹出菜单就意味着能使用“粘贴”,粘贴的内容可能是中文的。
#4
if(Clipboard.GetDataObject() != null)
Clipboard.SetDataObject(new object());
if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage)
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
在KEYDOWN事件中。
然后设置ContextMenu为一个没有子项的ContextMenu。
问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。
Clipboard.SetDataObject(new object());
if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage)
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
在KEYDOWN事件中。
然后设置ContextMenu为一个没有子项的ContextMenu。
问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。
#5
那就自己做个菜单,只有剪切和复制。