Dot-Net

如何從 WinForms 應用程序中使用者控制項上的子控制項中獲取事件?

  • February 12, 2021

主窗體有什麼方法能夠攔截在使用者控制項上的子控制項上觸發的事件?

我在我的應用程序的主窗體中嵌入了一個自定義使用者控制項。該控制項包含各種操作數據的子控制項,這些子控制項本身由主窗體上的其他控制項顯示。我想要的是,如果使用者更改子控制項時可以以某種方式通知主窗體,那麼我可以在其他地方更新數據和相應的顯示。

現在,我在作弊。我有一個委託連接到子控制項的焦點離開事件。這個委託改變了我沒有在其他地方使用的使用者控制項的一個屬性(在這個原因中,CausesValidation)。然後,我在主窗體上定義了一個委託,用於當使用者控制項的 CausesValidation 屬性發生更改時,它會指示應用程序更新數據並顯示。

出現問題是因為我還為焦點離開使用者控制項時設置了一個委託,因為我需要先驗證使用者控制項中的欄位,然後才能允許使用者執行其他任何操作。但是,如果使用者只是在子控制項之間切換,我不想驗證,因為它們可能沒有完成編輯。

基本上,我希望在使用者切換子控制項或離開使用者控制項時更新數據,但不進行驗證。當使用者離開控制項時,我想更新並驗證。現在,離開使用者控制項會導致驗證觸發兩次。

最佳實踐是在將事件UserControl冒泡到父表單的事件上公開事件。我已經開始為你整理了一個例子。以下是此範例提供的內容的描述。

  • UserControl1
  • 創建UserControl一個TextBox1
  • UserControl在被叫上註冊一個公共事件ControlChanged
  • 在寄存器中為TextChangedEventUserControl的事件處理程序TextBox1
  • TextChangeEvent處理程序函式中,我呼叫ControlChanged事件以冒泡到父表單
  • Form1
  • UserControl1在設計器上放置一個實例
  • UserControl1在forMouseLeave和 for上註冊一個事件處理程序ControlChanged

這是一個螢幕截圖,說明ControlChanged我在 上定義的事件UserControl可通過父 Windows 窗體上的 Visual Studio 中的 UX 獲得。

用於使用者控制的事件處理程序

引用自:https://stackoverflow.com/questions/163104