C#WinForms:我有一個MDI表單,我已經爲其菜單定義了一些快捷鍵,例如「ALT + C」打開Actions工具欄按鈕。問題是,如果我在父窗體中打開這個子窗體,但仍然在父窗體內點擊我的鼠標並按下「ACLT + C」,它仍然響應它並打開子窗體的「Actions」菜單。我怎樣才能防止這一點?爲什麼父窗體正在響應子窗體的快捷鍵?
0
A
回答
1
添加您的形式
bool actionWindow = false
上的標誌,然後當窗口打開時設置actionWindow爲true。在你的監聽器中檢查actionWindow。然後當actionWindow關閉時,將bool設置爲false。
嘗試:在子窗體中放置e.Handled = true;在重點新聞事件。
1
可能有更好的解決方案,但快速的方法是測試表單是否有焦點。因此,在您的孩子的事件處理程序,添加以下頂部:
if (this.MdiParent.ActiveControl.Name != this.Name)
{
return;
}
顯然,這沒有阻止的情況下燒製而成,只是防止後續代碼運行。
編輯:如果菜單項沒有事件處理程序,我能想到的這樣做的唯一的另一種方式是爲子窗體的Enter
和Leave
事件創建處理程序:
private void ChildForm_Leave(object sender, EventArgs e)
{
menuItem.Enabled = false;
}
private void ChildForm_Enter(object sender, EventArgs e)
{
menuItem.Enabled = true;
}
相關問題
- 1. 爲什麼隱藏子窗體也隱藏父窗體?
- 2. Rails的:子窗體在父窗體
- 3. C#/ WinForms/Make從子窗體訪問主窗體的菜單(快捷鍵)
- 4. 使用快捷鍵顯示Windows窗體
- 5. C#窗體窗體:Mdi父窗體和子窗體問題
- 6. C#窗體窗體應用程序,從子窗體關閉父窗體
- 7. 的WinForms:子窗體關閉父窗體
- 8. 從子窗體關閉父窗體
- 9. 引用父窗體到子窗體
- 10. 引用父窗體從子窗體
- 11. 如何在MDI父窗體中激活子窗體時禁用父窗體?
- 12. VB.NET在子窗體的子窗體(實例)中運行父窗體(實例)
- 13. 將窗體設置爲父窗體#
- 14. Windows窗體 - 從父窗體
- 15. Windows鍵盤快捷鍵和子窗口
- 16. 如何設置Windows窗體TabControl的鍵盤快捷鍵?
- 17. 從子窗體返回父窗體時調用父窗體方法
- 18. 使窗體響應
- 19. .lnk Windows窗體中的快捷方式
- 20. 如何在c中定義滾動窗體的快捷鍵#
- 21. 如果子窗體沒有數據,則爲空白父窗體
- 22. Visual Studio Windows窗體設計器鍵盤快捷鍵
- 23. 子窗體的條件格式不顯示在父窗體上
- 24. 如何在父窗體的中心設置子窗體?
- 25. 在父窗體運行時處理子窗體中的事件
- 26. 在父窗體上映射子窗體的數據symfony2
- 27. 在子窗體上使用父窗體中的變量?
- 28. 將數據從子窗體傳遞到子窗體並從父窗體打開子窗體
- 29. 使用winforms,mdi,父母和子窗體,在父窗體下的指定空間中打開子窗體
- 30. Windows窗體桌面快捷方式
它就像一個「黑客」,它不會通過代碼審查。 – Bohn
我沒有對MDI表單做過任何事情,但對我來說,你描述的行爲是正確的。你必須使用MDI作爲父表單嗎? –
我們已經升級了這個應用程序從VB 6.0和VB 6.0中,當我點擊「ALT + C」它不會打開子窗體的操作菜單。所以在代碼審查他會說不,它不同於VB,爲什麼你沒有白盒子,等等...... – Bohn