2009-10-16 81 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否则。