如何在不同的事件处理程序中调用事件?

时间:2017-01-28 08:54:58

标签: c#

如何致电DataGrideEventHandler ColumnHeaderMouseClickdataGridView_ColumnWidthChanged事件处理程序?

private void dataGridView1_ColumnHeaderMouseClick(object sender,
                                                  DataGridViewCellMouseEventArgs e)
{
        //some code
}

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
    dataGridView1_ColumnHeaderMouseClick(sender,e);//its not working
}

3 个答案:

答案 0 :(得分:1)

如果你真的想这样做(因为它往往会成为意大利面条代码),那么你可以像这样传递null到ColumneHeaderMouseClick:

private void dataGridView1_ColumnHeaderMouseClick(object sender,
                                                  DataGridViewCellMouseEventArgs e)
{
        //some code, but do not rely on e != null
}

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
    dataGridView1_ColumnHeaderMouseClick(sender, null);
}

但我建议尽可能多地从事件处理程序中提取代码到其他类,以避免在UI代码中出现紧密耦合。

答案 1 :(得分:0)

您可以使用它来触发事件:

dataGridView1_ColumnHeaderMouseClick(new object(), null);

您的代码因为您尝试传递其他类型而无法正常工作的原因。您传递的是DataGridViewColumnEventArgs而不是DataGridViewCellMouseEventArgs

希望它有所帮助!

答案 2 :(得分:0)

有不同的签名,相同的sender但不同的EventArgs。所以你需要再次重写EventArgs

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
    var margs = new MouseEventArgs(MouseButtons, 1, MousePosition.X, MousePosition.Y, 0);
    var args = new DataGridViewCellMouseEventArgs(e.Column.Index, 0, MousePosition.X, MousePosition.Y, margs);
    dataGridView1_ColumnHeaderMouseClick(sender, args);
}