我的表格上有这个功能:
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中的单元格值被更改时才会运行该函数,我想在单击“确定”按钮时访问该函数。但是,我应该在参数值中添加什么?
答案 0 :(得分:3)
提取当前UpdateQuantityDataGridView()
方法中的逻辑并将其放入一个名为您想要的新public
方法,然后您可以从类中的任何位置或任何其他引用您的代码中调用此逻辑上课,像这样:
public void DoUpdateQuantityLogic()
{
// Put logic here
}
注意:如果您实际上没有使用sender
或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();
}
这允许您重新使用逻辑,并且如果您选择对此逻辑进行单元测试,还可以将功能隔离到使单元测试更容易的方法中。
如果您决定使用现有的基于事件的方法基础结构,则可以为事件处理程序的null
和sender
参数传递e
,如下所示:
UpdateQuantityDataGridView(null, null);
答案 1 :(得分:2)
如果您的方法UpdateQuantityDataGridView()
实际使用参数sender
和e
?如果不是两个都传递null。
UpdateQuantityDataGridView(null, null);
如果您正在使用它们:
var e = new DataGridViewCellEventArgs();
// assign any properties
UpdateQuantityDataGridView(dataGridView1, e);
答案 2 :(得分:1)
您可以使用发件人,但不能使用 e ,因为 UpdateQuantityDataGridView 需要 e 才能使用 e 输入 DataGridViewCellEventArgs 。
根据您的 UpdateQuantityDataGridView 处理程序想要使用 e 参数执行的操作,当您从< 参数调用它时,您可以直接传递 null 强>提交按钮即可。 否则,您必须新 DataGridViewCellEventArgs ,并使用您自己的处理程序所需/期望的相应值填充它。