Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从另一个窗体调用方法_C#_.net_Winforms_Oop_Forms - Fatal编程技术网

C#从另一个窗体调用方法

C#从另一个窗体调用方法,c#,.net,winforms,oop,forms,C#,.net,Winforms,Oop,Forms,嗨 我有两张表格Form1和Form2 Form1有一个表,其中有我的记录,Form1中有一个用于刷新表的空白 Form2是我的插入表单,我正在将数据插入sqlserver。我希望在Form2中保存记录后运行Form1 Refresh void。(当Form1打开时,Form2打开) 谢谢。在Form1中,当您打开Form2时,请附加到Form2的关闭/关闭事件,或一个自定义的保存事件,该事件在引发时将刷新Form1中的表。Form2必须有对Form1实例的引用。单击“插入”按钮时,可以将此引用

嗨 我有两张表格Form1和Form2

Form1有一个表,其中有我的记录,Form1中有一个用于刷新表的空白

Form2是我的插入表单,我正在将数据插入sqlserver。我希望在Form2中保存记录后运行Form1 Refresh void。(当Form1打开时,Form2打开)


谢谢。

在Form1中,当您打开Form2时,请附加到Form2的关闭/关闭事件,或一个自定义的保存事件,该事件在引发时将刷新Form1中的表。

Form2必须有对Form1实例的引用。单击“插入”按钮时,可以将此引用传递到Form2:

Form2 insertForm = new Form2();
//Form2.ShowDialog(Me); - Correction - 'Me' is for VB. in C# it's:
Form2.ShowDialog(this);
接下来,在Form2上,您可以像这样访问Form1:

(Form1)this.Parent.RefreshTable();
...
private Form1 mainWindow;
public Form2(Form1 mainWindow)
{
   this.mainWindow = mainWindow;
}
...
public void HaveSavedSql()
{
   this.mainWindow.RefreshAll();
}

调整Form2的构造,使其包含一个额外的参数,如下所示:

(Form1)this.Parent.RefreshTable();
...
private Form1 mainWindow;
public Form2(Form1 mainWindow)
{
   this.mainWindow = mainWindow;
}
...
public void HaveSavedSql()
{
   this.mainWindow.RefreshAll();
}

你应该考虑一下,这样你就可以分心了。接口对很多事情都很有用

尝试从另一个窗体调用此方法:

if (System.Windows.Forms.Application.OpenForms["ParentFormName"] != null)
    {
        (System.Windows.Forms.Application.OpenForms["ParentFormName"] as   ParentFormName).MethodName(args);
    }

Form1是否直接打开Form2?对不起,我的英语不好,所以在
Form2.ShowDialog()调用返回后立即调用
Refresh
方法。就这么简单。当Form2关闭时,您可以刷新Form1吗?或者将Form2的所有者设置为Form1,并以这种方式调用Refresh方法。我很喜欢它,但我如何从另一个类调用方法请参见我对Akram答案的评论。这是一种创建内存泄漏的简单方法,对于刚开始.NET编程的程序员来说,这并不是一个好主意。您必须确保显式删除事件处理程序,并确保子窗体得到释放。