2015-10-14 73 views
2

我加入了一個.net窗口一個窗口saleslogix裏面的插件表單控件添加(.NET擴展),每一件事情是工作的罰款,但在按下這個控制裏面的「Tab」鍵,而不是繼續下一個文本框,控件將轉到下一個插件。Tab鍵在Windows中不起作用在SalesLogix的窗戶

我已經搜索了很多,找不到解決辦法,當我在另一個saleslogix窗口插件中添加瀏覽器控件時,此文本框內的頁面中有多個文本框。令我驚訝的是,按下Tab鍵完美運行,控制權轉到下一個文本框。

任何幫助,非常感謝。

回答

3

在主機應用程序中使用Winforms(以及許多其他UI類庫)時,這是完全正常的事情。無論哪個控件具有焦點,都需要識別導航鍵,如Tab和光標鍵以及快捷鍵按鍵。這樣做的一個辦法是落實單一控制KeyDown事件處理程序。當然這太痛苦了。

因此,它不會以這種方式工作,當它被消息循環接收到時,會識別按鍵,之前將其分派給焦點控件。重寫ProcessCmdKey()方法是執行此操作的一般方法。基本方法負責導航和識別菜單和按鈕助記符。

問題是,它沒有被收發郵件的.NET消息循環。它是具有循環的主機應用程序。它不知道有關ProcessCmdKey()的bean。所以它不會被調用,導航不起作用。

它往往在一個WebBrowser工作,因爲它是一個ActiveX控件。它旨在與其主機進行交互。特別是它會協商決定哪一個人來處理密鑰。 IOleInPlaceActiveObject::TranslateAccelerator() method這樣做。 .NET和主機應用程序中不提供這種管道工具很少用於提供替代方案。

你可以考慮「過痛苦」的解決方案,但不可思議的事,你喜歡它的聲音。這裏只有一個解決這個問題的其他體面的方式,則必須調用ShowDialog(),以顯示你的表格。現在它是分派的.NET循環,Tab和光標鍵工作正常。這往往是不受歡迎的建議,對話會非常尷尬。如果你很幸運,知道你在做什麼,主人可以處理它(通常不是),那麼使用一個線程可以摒棄這種模式。詢問供應商的建議,特別是線程方面,將是明智的。

相關問題