2017-04-23 52 views
0

我已經下載了自定義基礎Winforms作爲我的基本窗體的dll,自定義窗體的開發人員不再可用,並且我的所有窗體都繼承在這個基礎表單中,因爲它具有我所有其他表單所共有的一些功能,所以我的問題是,當我按ESC鍵退出或立即關閉活動表單時沒有發出警告,我想覆蓋事件的keydown事件ESC鍵但它不起作用。我嘗試了下面的代碼,但他們不工作,當我按下ESC時,窗體關閉,因爲關閉窗體的ESC事件被嵌入到自定義的基礎窗體中。如何覆蓋vb.net中的自定義基礎Winforms中的按鍵事件

Private Sub frmMain_KeyPress(sender As Object, e As KeyPressEventArgs) 
     If e.KeyChar = Chr(27) Then 
      e.Handled = True 
     End If 
    End Sub 


    Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) 
     If e.KeyCode = Keys.Escape Then 
      e.Handled = True 
     End If 
    End Sub 
+0

您可以嘗試通過[在這個答案顯示反射]從'KeyDown'活動中刪除所有事件處理程序(http://stackoverflow.com/a/91853/2882256)。 –

+0

感謝您的回覆,我不可能刪除Keypress事件,因爲我需要它在窗體上,我只是想從基本窗體中取消ESC鍵事件,以便窗體不會退出,因爲它是基礎上的默認行爲表單 –

回答

0

看來你的基本形式有屬性的KeyPreview設置爲True。你需要將它設置爲false,最好的地方可能會在你的構造函數的最後。在KeyPreview屬性

'frmMain.vb 
Public Sub New() 
    InitializeComponent()  
    MyBase.KeyPreview = False 
End Sub 

更多信息here

+0

如果我要將鍵預覽設置爲false,我不能在表單上使用功能鍵,是否有解決方法,以便在keypreview設置爲false時可以使用任何鍵?謝謝! –

+0

那麼,如果你的基類api不讓你攔截並處理這種情況,我不知道任何解決方法。我可能會設置KeyPreview = False並處理派生表單上的關鍵事件。 –