【问题标题】:invoke datagridview events in wpf programmatically以编程方式调用 wpf 中的 datagridview 事件
【发布时间】:2020-08-09 01:16:16
【问题描述】:

(初学者的问题,如有冒犯请继续,否则欢迎您的意见)

我试图在 Wpf 代码中调用 datagridview 事件。实现事件调用很简单。

例如:

    dgv1.ColumnHeaderMouseClick+=delegate(
    object sender, DataGridViewCellMouseEventArgs e)
{..code on event..};

我的问题:在代码中的其他地方调用 dgv 事件的正确方法是什么。 (以编程方式按标题列)。

谢谢

【问题讨论】:

    标签: c# wpf datagridview event-handling eventargs


    【解决方案1】:

    对我来说更简洁的方法是将自定义事件的方法分开。 像这样的:

    private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
        {
            MessageBox.Show("Sorting was executed.");
        }
    

    然后将该方法设置为控件的事件属性,如下所示:

    dataGrid.Sorting += DataGrid_Sorting;
    

    使用此代码不会变得凌乱,可读性仍然完好。

    希望对你有帮助。编码愉快。

    【讨论】:

      【解决方案2】:

      我认为唯一“受支持”的方式(即不处理 Windows 消息并通常忽略 .NET 框架)是调用OnColumnHeaderMouseClick。该方法的用途是什么,除了它是受保护的,因为它实际上是为执行他们自己版本的控件的人准备的,而不是让任何随机的人开始触发事件。

      因此,您可以继承 DataGridView 并添加一个公共方法来包装 OnColumnHeaderMouseClick,或者您可以使用反射来调用该方法,即使它不是公共的。


      这是 C# 中的常见模式。当你写

      public event EventHandler XxxEvent;
      

      它变成了类似的东西

      private EventHandler _XxxEvent;
      public event EventHandler XxxEvent
      {
          add { _XxxEvent += value; }
          remove { _XxxEvent -= value; }
      }
      

      (加上一些对 null 的处理,实际上不要按原样使用该代码)。

      XxxEvent 实际上不是可以在类外调用的委托(您会收到编译器错误“事件 'ClassName.XxxEvent' 只能出现在 += 或 -=" 的左侧) . _XxxEvent 支持字段并不是您实际上应该知道的,并且无论如何都是私有的。因此,如果您希望任何人都能够从您的类继承,您通常有一个方法,其名称与前缀为“On”的事件相同

      protected void OnXxxEvent(EventArgs args)
      {
          XxxEvent?.Invoke(this, args);
      }
      

      【讨论】:

      • 我知道该事件超出了当前上下文。我提供了正确的 arg 但似乎调用方法是错误的。事件:DataGridViewCellMouseEventArgs E = new DataGridViewCellMouseEventArgs(col, row, x, y, new System.Windows.Forms.MouseEventArgs(MouseButtons.Left, clicks, x, y, delta));
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2010-10-04
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多