2009-10-16 63 views
2

在我的winforms應用程序中,我有一個包含DataGridView的UserControl。我需要時將此UserControl實例化並加載到主窗體(frmMain)中的面板中。我的問題是弄清楚如何重現或傾聽我在UC的DataGridView中引發的事件。例如,我想在我的主窗體中處理DataGridView的CellDoubleClick事件,而不是通過UC。觀察通過Winforms UserControl的一個實例創建的事件

這可能嗎?當雙擊網格中的單元格時,我曾想過更新屬性,然後讓我的主窗體在屬性更改時執行任何操作 - 因此我想使用INotifyPropertyChanged。儘管如此,我還沒有對如何在m場景中使用它提供大量的幫助,並且非常感謝在這方面的一些幫助,或者是否有人可以提出一種替代解決方案。

很多!

回答

2

謝謝你4你的回覆。對不起,以前沒有回覆。我還是設法從通過創建我的UC公共事件排序這個問題:

public event DataGridViewCellEventHandler GridRowDoubleClick { 
    add { dgvTasks.CellDoubleClick += value; } 
    remove { dgvTasks.CellDoubleClick -= value; } 
} 

,並在我的主要形式,我實例化後,並用以下連接加載UC

_ucTask.GridRowDoubleClick += new DataGridViewCellEventHandler(TasksGrid_CellDoubleClick); 

事件:

private void TasksGrid_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { 
    // do work here! 
} 

這是行不通的,雖然我不知道是否有任何專家在那裏預見到這種方法存在問題。

+0

這與我在第2點寫的相同,很好理解我們都獨立使用這種方法=)。 – Restuta 2009-10-16 14:44:00

2

您的用戶控件必須封裝一些邏輯,因此如果您想按照您所描述的方式處理您的控件中的DataGridView事件,那麼您可能會錯過用戶控件和封裝的想法。技術上這裏有兩種方法可以做到這一點:

  1. 在DataGridView類型的用戶控件中創建一個公共屬性。
  2. 製作事件包裝。您需要在DataGridView CellDoubleClick(或任何)被拋出時引發的用戶控件中創建一個事件,並且在您的調用代碼中處理此事件包裝。

第二種方法是更合乎邏輯的,COS控件的內部邏輯incapsulated,你可以提供你的最終用戶有更多的邏輯和有意義的事件組件然後CellDoubleClidk否則。