C# 以编程方式调用wpf中的datagridview事件

C# 以编程方式调用wpf中的datagridview事件,c#,wpf,datagridview,event-handling,eventargs,C#,Wpf,Datagridview,Event Handling,Eventargs,(初学者的问题,如果有冒犯,请继续,否则欢迎您的输入) 我试图在Wpf代码中调用datagridview事件。实现事件调用非常简单 例如: dgv1.ColumnHeaderMouseClick+=delegate( object sender, DataGridViewCellMouseEventArgs e) {..code on event..}; 我的问题是:在代码的其他地方调用dgv事件的合适方法是什么。(以编程方式按标题列) 谢谢对我来说,一个更干净的方法是将自定义

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

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

例如:

    dgv1.ColumnHeaderMouseClick+=delegate(
    object sender, DataGridViewCellMouseEventArgs e)
{..code on event..};
我的问题是:在代码的其他地方调用dgv事件的合适方法是什么。(以编程方式按标题列)


谢谢

对我来说,一个更干净的方法是将自定义事件的方法分开。 大概是这样的:

private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
    {
        MessageBox.Show("Sorting was executed.");
    }
dataGrid.Sorting += DataGrid_Sorting;
然后将该方法设置为控件的事件属性,如下所示:

private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
    {
        MessageBox.Show("Sorting was executed.");
    }
dataGrid.Sorting += DataGrid_Sorting;
使用此代码不会变得凌乱,可读性仍然完好无损


我希望它能帮助你。快乐编码。

对我来说,一个更干净的方法是分离自定义事件的方法。 大概是这样的:

private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
    {
        MessageBox.Show("Sorting was executed.");
    }
dataGrid.Sorting += DataGrid_Sorting;
然后将该方法设置为控件的事件属性,如下所示:

private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
    {
        MessageBox.Show("Sorting was executed.");
    }
dataGrid.Sorting += DataGrid_Sorting;
使用此代码不会变得凌乱,可读性仍然完好无损

我希望它能帮助你。愉快的编码。

我认为唯一“受支持”的方式(即不处理Windows消息,通常忽略.NET framework)是调用。这就是这个方法的目的,除了它是受保护的,因为它实际上是为某人做他们自己版本的控件,而不是为任何随机的人启动事件

因此,您可以子类化
DataGridView
并添加一个公共方法来包装
OnColumnHeaderMouseClick
,也可以使用反射来调用该方法,即使它不是公共的


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

公共事件处理程序XxxEvent;
它变成了类似的东西

private EventHandler\u XxxEvent;
公共事件处理程序XxxEvent
{
添加{uxxxevent+=value;}
删除{uxxxevent-=value;}
}
(加上对null的一些处理,实际上不要按原样使用该代码)

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

受保护的void OnXxxEvent(EventArgs args)
{
XxxEvent?调用(this,args);
}
我认为唯一“受支持”的方法(即不处理Windows消息,通常忽略.NET framework)是调用。这就是这个方法的目的,除了它是受保护的,因为它实际上是为某人做他们自己版本的控件,而不是为任何随机的人启动事件

因此,您可以子类化
DataGridView
并添加一个公共方法来包装
OnColumnHeaderMouseClick
,也可以使用反射来调用该方法,即使它不是公共的


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

公共事件处理程序XxxEvent;
它变成了类似的东西

private EventHandler\u XxxEvent;
公共事件处理程序XxxEvent
{
添加{uxxxevent+=value;}
删除{uxxxevent-=value;}
}
(加上对null的一些处理,实际上不要按原样使用该代码)

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

受保护的void OnXxxEvent(EventArgs args)
{
XxxEvent?调用(this,args);
}

我发现事件不在当前上下文中。我提供了正确的参数,但似乎调用方法是错误的。事件:DataGridViewCellMouseEventArgs E=新DataGridViewCellMouseEventArgs(列、行、x、y、新系统、Windows.Forms.MouseEventArgs(鼠标按钮、左键、单击、x、y、增量));我知道这件事不符合当前的情况。我提供了正确的参数,但似乎调用方法是错误的。事件:DataGridViewCellMouseEventArgs E=新DataGridViewCellMouseEventArgs(列、行、x、y、新系统、Windows.Forms.MouseEventArgs(鼠标按钮、左键、单击、x、y、增量));