2011-10-10 63 views
1

我正在尝试更新两个链接的TextBox es。我禁用一个事件,然后发送使用如SendKeys::Send("A");按键具有先给予其焦点:SendKeys ::发送,将要疯狂

texBox2->Focus(); 
texBox2->KeyDown -= gcnew KeyEventHandler(this, &Form1::texBox2_KeyDown); 
SendKeys::Send("A"); 
texBox2->KeyDown += gcnew KeyEventHandler(this, &Form1::texBox2_KeyDown); 

几乎的作品,但,是完全的心理,而不是重复的字符(我不敢看检查,因为它的确切的关键我疯狂地扑灭溢出)直到我按下control-alt-del。其他键没有任何效果,鼠标冻结。但任务经理奇迹般地恢复了我的控制权,我不会停止或杀死任何东西。

任何人都可以建议吗?调试器挂在该SendKeys::Send("A");语句。

回答

5

SendKeys地点输入到队列中的消息队列中,因此将在之后得到处理您已重新连接事件。因此,古怪。

我的建议是停止使用SendKeys更新您自己的控件的内容。只需直接修改文本框的内容即可。

+0

直接修改大的不可变字符串会导致闪烁,我发现SendWait方法更有希望。我在每个处理程序中设置了一个中断点,并且在'无限'循环中并没有打断他们。 – John

+0

假设这是WinForms,那么你可以通过使用WM_SETSEL的windows api来廉价追加字符。可能有一个.net的方式来做到这一点。重新分配整个字符串是不好的,但SendKeys更糟糕。使用WM_SETSEL是我的重点。 –

+0

但是你有多好。在对SendWait初步满意之后,更加诡异。整个屏幕(不只是文本框)闪烁,如果我按住一个按键,它会出现不合适的地方,因为我正在以编程方式更新第二个按键。没有大规模循环虽然:)感谢WM_SETSEL提示大卫 – John