2

我的表格上有这个功能:

private void UpdateQuantityDataGridView(object sender, DataGridViewCellEventArgs e)
{
   (...codes)
}

我想在另一个函数中调用该函数,假设当我单击“确定”按钮时,下面的函数将运行并执行上面具有参数类型的函数。

private void button5_Click(object sender, EventArgs e) // This is the "OK" button click handler.
{
  SubmitButton(sender, e);
}

private void SubmitButton(object sender, EventArgs e) // This is function of "OK" button
{
  (...codes)
  UpdateQuantityDataGridView("What should i put in here? I tried (sender, e), but it is useless")
}

我知道当我们放这样的东西时这个函数会运行: dataGridView1.CellValueChanged += new DataGridViewSystemEventHandler(...);

但是,我不希望这样,因为该函数仅在 DataGridView 中的单元格值已更改时才会运行,我想在单击“确定”按钮时访问该函数。但是,我应该在参数值中放入什么?

4

3 回答 3

3

提取UpdateQuantityDataGridView()方法中当前的逻辑并将其放入一个新public方法中,命名为您想要的任何名称,然后您可以从类中的任何位置或引用您的类的任何其他代码调用此逻辑,如下所示:

public void DoUpdateQuantityLogic()
{
    // Put logic here
}

注意:如果你实际上不使用senderor e,那么你可以不带参数离开上面的方法,但是如果你确实使用e了 ,例如,那么你需要为DoUpdateQuantityLogic()方法提供一个参数来说明你是什么e对象的属性使用是。

现在您可以调用DoUpdateQuantityLogic()其他方法,如下所示:

private void button5_Click(object sender, EventArgs e) // This is the "OK" button click handler.
{
    DoUpdateQuantityLogic();
}

private void SubmitButton(object sender, EventArgs e) // This is function of "OK" button
{
    DoUpdateQuantityLogic();
}

如果您选择对该逻辑进行单元测试,这允许您重用您的逻辑并将功能隔离到一种使单元测试更容易的方法中。

如果您决定使用现有的基于事件的方法基础结构,那么您可以同时传递事件处理程序的nullthesender和参数,如下所示:e

UpdateQuantityDataGridView(null, null);
于 2013-09-28T02:24:10.790 回答
2

如果您的方法UpdateQuantityDataGridView()实际使用参数sendere?如果不只是为两者传递 null 。

UpdateQuantityDataGridView(null, null);

如果您正在使用它们:

var e = new DataGridViewCellEventArgs();
// assign any properties
UpdateQuantityDataGridView(dataGridView1, e);
于 2013-09-28T02:28:27.500 回答
1

您可以使用sender,但不能使用e因为UpdateQuantityDataGridView需要e的类型为DataGridViewCellEventArgs

根据您的UpdateQuantityDataGridView处理程序想要对e参数执行的操作,您可以在从SubmitButton调用它时传递null。否则,您必须新建一个DataGridViewCellEventArgs并使用您自己的处理程序需要/期望的适当值填充它。

于 2013-09-28T02:23:35.597 回答