在另一个已打开的表单上执行函数

时间:2014-11-05 14:41:00

标签: c# winforms function

我有一个带有datagridview的表单。

当您从datagridview双击某一行时,将打开另一个表单,这个表单基本上是您可以编辑双击数据的表单。

此“编辑”表单中有3个按钮,删除,更新和返回主表单按钮。

完成此表单上应该执行的操作后,它会关闭。

我的问题是;

当这个表单关闭时,我希望刷新主表单中datagridview内部的数据,如何从编辑表单中调用主表单上的该函数。

请记住,我已经有了重装功能,假设它叫做refreshData();.

4 个答案:

答案 0 :(得分:2)

如果你打开编辑窗体作为模态窗口,ShowDialog()调用是阻塞的,所以如果你之后放置了refreshData调用,它将在编辑窗体关闭后执行:

var editForm = new EditForm(...);
var result = editForm.ShowDialog();
if (result == DialogResult.OK)
{
    refreshData(); 
}

答案 1 :(得分:1)

我认为这会奏效:

向AnotherForm添加DatagridviewForm类型的DatagridviewForm属性(您可能还有其他名称/类型)。在您调用anotherForm.ShowDialog的部分中,添加以下代码:

anotherForm = new AnotherForm();
anotherForm.DatagridviewForm = this;
anotherForm.ShowDialog();
anotherForm.Dispose();

在AnotherForm的关闭处理程序中,更新或刷新数据:

private void AnotherForm_FormClosed(object sender, FormClosedEventArgs e)   
{ 
    DatagridviewForm.refreshData();
}

答案 2 :(得分:1)

如果你使用.ShowDialog(),那么只需将刷新函数放在这行代码下。

该程序将继续

private void cell1_DoubleClick(object sender, System.EventArgs e)

功能

所以你的代码看起来就像这样;

private void cell1_DoubleClick(object sender, System.EventArgs e)
{
     //Your previous code ....

     //The part where you open the EditForm
     MyEditForm.ShowDialog();

     //After it has been closed the program will continue to execute this function(if it has not been ended yet)
     RefreshData();
     //Since this function is running from your main form, the function RefreshData() will be executed on your main form aswell
}

根本不需要检查一些对话框结果。

答案 3 :(得分:0)

您可以在表单关闭时访问数据

Form MyEditForm;

private void cell1_DoubleClick(object sender, System.EventArgs e)
{
     if (MyEditForm==null)
     { 
         MyEditForm=new MyEditForm();
         MyEditForm.FormClosing += refreshData;
     }
     MyEditForm.ShowDialog();
}

private void refreshData(object sender, EventArgs e)
{
     var myDataObj=MyEditForm.getData();
}