Events 观察通过Winforms UserControl实例创建的事件

Events 观察通过Winforms UserControl实例创建的事件,events,datagridview,user-controls,winforms,Events,Datagridview,User Controls,Winforms,在我的winforms应用程序中,我有一个包含DataGridView的UserControl。当需要时,我以我的主窗体(frmMain)实例化并加载这个UserControl到一个面板中。我的问题是弄清楚如何响应或侦听UC的DataGridView中提出的事件。例如,我希望在我的主窗体中处理DataGridView的CellDoubleClick事件,而不是通过UC 这可能吗?我曾想过在双击网格中的单元格时更新属性,然后让我的主窗体在该属性更改时执行任何操作-因此我想到使用INotifyPro

在我的winforms应用程序中,我有一个包含DataGridView的UserControl。当需要时,我以我的主窗体(frmMain)实例化并加载这个UserControl到一个面板中。我的问题是弄清楚如何响应或侦听UC的DataGridView中提出的事件。例如,我希望在我的主窗体中处理DataGridView的CellDoubleClick事件,而不是通过UC

这可能吗?我曾想过在双击网格中的单元格时更新属性,然后让我的主窗体在该属性更改时执行任何操作-因此我想到使用INotifyPropertyChanged。然而,对于如何在m场景中使用它,我并不十分了解,如果有人能提出替代解决方案,我将非常感谢您在这方面的帮助


太多了

您的用户控件必须封装一些逻辑,因此,如果您希望以您描述的方式处理控件中的DataGridView事件,您可能在用户控件和封装的概念中遗漏了一些内容。从技术上讲,有两种方法可以做到这一点:

  • 在DataGridView类型的用户控件中设置公共属性
  • 制作一个事件包装器。您需要在用户控件中创建一个事件,该事件在DataGridView CellDoubleClick(或任意)被刷新时引发,并在调用代码中处理此事件包装器

  • 第二种方法更具逻辑性,因为控件的内部逻辑是封闭的,您可以向组件的最终用户提供比CellDoubleClidk或其他方法更具逻辑性和意义的事件。

    谢谢您的回复。很抱歉没有早点回复。我确实通过在我的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!
    }
    

    这确实有效,尽管我不知道是否有任何u专家预见到这种方法存在问题。

    这与我在第2点中所写的相同,很高兴了解我们都是独立使用这种方法的=)。