当读一些RichTextControl
里面的属性Application.Idle
有些输入法无法使用。
鉴于这个简单的代码:
_richTextControl = new RichTextControl();
Application.Idle += delegate(object sender, EventArgs e) {
btnCopy.Enabled = _richTextControl.SelectionLength > 0;
btnPaste.Enabled = _richTextControl.CanPaste();
};
它适用于我尝试过的大多数输入法,但至少对于中文(繁体,台湾) with 微软繁体中文数组(6.0) and 中国传统大艺 (6.0)它会阻止 IME 正常工作(我只尝试过 Windows 7,英语和台湾语)。您可以开始打字,但是当Idle
代码被执行(读取SelectionLength
属性和调用CanPaste()
方法,这里我写了它们,但每一个都足以重现这一点)它将停止工作(您键入但弹出窗口立即关闭,并且没有任何内容发送到RichTextControl
).
我查了一下MSDNEM_GETSELTEXT
and EM_CANPASTE
但它没有提及这个问题。我也尝试更换SelectionLength
属性手动发送EM_GETSELTEXT
with SendMessage()
但它并没有改变这种奇怪的行为(但是我检查了写字板 - 它使用丰富的编辑器 - 即使(AFAIK)MFC命令使用空闲时间来更新UI状态它也可以正常工作)。
当然我可以将一些代码移入SelectionChanged
事件和更新 UI 均来自Idle
和来自SelectionChanged
(它会起作用)或者我可以更新一些flags in SelectionChanged
并更改 UIIdle
但这会破坏现有代码,并且会迫使 UI 库发生重大变化(所有命令都不知道Idle
or SelectionChanged
,它们只是在 a 中返回 trueCanExecute()
当目标控件允许执行时的方法)。如果没有其他可行的方法,那么我可以从中派生一个类RichTextControl
使这些方法/属性可以在Idle
(使用其他地方更新的标志)但是(为了避免大的重构)我会知道这是否是一个已知问题,与 IME 本身相关的错误,或者是否有其他我错过的东西。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)