2011-10-10 37 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