如何做一个只准许输入英文的TEXTBOX?我做到了控制键盘,但鼠标右键菜单控制不了。请进

时间:2021-06-27 00:32:05
目的:做一个完美的英文TEXTBOX。
看了一些控制输入法的文章,但所有的都不是最终的解决办法。列举缺点如下:
1、设置ImeMode属性。当2次CTRL+SPACE时,输入法可用。
2、使用InputLanguage控制,但鼠标右键的弹出菜单的“粘贴”还可用。
3、使用InputLanguage控制,意味着键盘的剪切复制功能丢失了。(我在KeyDown中处理)

我觉得ImeMode是微软的BUG,所以想绕过去就会困难一些,也要牺牲部分功能。

我想问的是:
1、有更好的解决办法吗?
2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。

5 个解决方案

#1


To 2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。

让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。

问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。

#5


那就自己做个菜单,只有剪切和复制。

#1


To 2、如何关闭TextBox的系统弹出菜单或者如何取得这个菜单让我来控制它的形式。

让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。

问题得到解决,不足之处是没有了剪切和复制功能,可以在键盘事件中细化处理克服。

#5


那就自己做个菜单,只有剪切和复制。