调用静态方法关闭表单
Invoke static method to close form
我有两个 Windows 表格 - Form1
和 Form2
。我需要通过 Form2
中的按钮单击事件关闭 Form1
。 Form1
里面的方法是static
怎么办?
Form1
namespace WinClose
{
public partial class Form1 : Form
{
public static void CloseForm()
{
this.Close();
}
}
}
Form2
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1.CloseForm();
}
}
}
我收到以下错误
Keyword "this" is not valid in static property, static method or
static field initializer.
我听说过 Single-ton
、Multi-ton
个概念。是否需要转换 class 或者有任何简单的方法来处理这个?
编辑
Form1
和 Form2
可以有多个实例。考虑以下情况。
- 用户打开
Form1
,然后从 Form1
打开 Form2
,在 Form2
的按钮单击中,应该关闭 Form1
(实例 1)
- 用户可以再次打开
Form1
的另一个实例,然后从 Form1
打开 Form2
,在 Form2
的按钮单击中,应该关闭 Form1
. (实例 2)
即,当用户单击 Form2
(实例 2) 中的按钮时,只有一个 Form1
(实例 2)应该关闭。
如有任何帮助,我们将不胜感激。
提前致谢。
想多了,直接关了。
无法通过静态方法关闭表单实例,因为 class(静态方法是 class 的一部分)不知道该实例。
namespace WinClose
{
public partial class Form2 : Form
{
Form1 form1;
private void button1_Click(object sender, EventArgs e)
{
this.form1.Close();
}
}
}
值 form1
可以通过构造函数或通过调用者的 属性 设置。
如果只想关闭打开Form2的Form1,必须将Form1作为参数传递给Form2的构造函数:
namespace WinClose
{
public partial class Form2 : Form
{
Form1 form1;
public Form2(Form1 form1) {
InitializeComponent();
this.form1 = form1;
}
private void button1_Click(object sender, EventArgs e)
{
this.form1.Close();
}
}
}
如果要关闭 Form1 的所有实例:
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
foreach (var form in Application.OpenForms.OfType<Form1>().ToList())
form.Close ();
}
}
}
你打错电话了
查看以下内容
namespace WinClose
{
public partial class Form1 : Form
{
//no need of CloseForm
}
}
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
//Form1 o = new Form();//instance needed
Form1 o= Application.OpenForms.OfType<Form1>
if(o != null)
{
o.Close();
}
}
}
}
您显然不能在静态方法中使用 this
引用。它指的是哪个实例?
您可以将其设为单例,但这听起来像是一种设计味道。
我看不出该方法应该是静态的。如果 Form2
需要了解 Form1
,那么它应该有一个对 Form1
实例的引用。
或者,如果 Form2
不应该知道 Form1
,但 Form1
知道 Form2
,那么 Form2
可以触发一个事件,它发出信号 Form1
关闭。
我有两个 Windows 表格 - Form1
和 Form2
。我需要通过 Form2
中的按钮单击事件关闭 Form1
。 Form1
里面的方法是static
怎么办?
Form1
namespace WinClose
{
public partial class Form1 : Form
{
public static void CloseForm()
{
this.Close();
}
}
}
Form2
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1.CloseForm();
}
}
}
我收到以下错误
Keyword "this" is not valid in static property, static method or static field initializer.
我听说过 Single-ton
、Multi-ton
个概念。是否需要转换 class 或者有任何简单的方法来处理这个?
编辑
Form1
和 Form2
可以有多个实例。考虑以下情况。
- 用户打开
Form1
,然后从Form1
打开Form2
,在Form2
的按钮单击中,应该关闭Form1
(实例 1) - 用户可以再次打开
Form1
的另一个实例,然后从Form1
打开Form2
,在Form2
的按钮单击中,应该关闭Form1
. (实例 2)
即,当用户单击 Form2
(实例 2) 中的按钮时,只有一个 Form1
(实例 2)应该关闭。
如有任何帮助,我们将不胜感激。
提前致谢。
想多了,直接关了。 无法通过静态方法关闭表单实例,因为 class(静态方法是 class 的一部分)不知道该实例。
namespace WinClose
{
public partial class Form2 : Form
{
Form1 form1;
private void button1_Click(object sender, EventArgs e)
{
this.form1.Close();
}
}
}
值 form1
可以通过构造函数或通过调用者的 属性 设置。
如果只想关闭打开Form2的Form1,必须将Form1作为参数传递给Form2的构造函数:
namespace WinClose
{
public partial class Form2 : Form
{
Form1 form1;
public Form2(Form1 form1) {
InitializeComponent();
this.form1 = form1;
}
private void button1_Click(object sender, EventArgs e)
{
this.form1.Close();
}
}
}
如果要关闭 Form1 的所有实例:
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
foreach (var form in Application.OpenForms.OfType<Form1>().ToList())
form.Close ();
}
}
}
你打错电话了
查看以下内容
namespace WinClose
{
public partial class Form1 : Form
{
//no need of CloseForm
}
}
namespace WinClose
{
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
//Form1 o = new Form();//instance needed
Form1 o= Application.OpenForms.OfType<Form1>
if(o != null)
{
o.Close();
}
}
}
}
您显然不能在静态方法中使用 this
引用。它指的是哪个实例?
您可以将其设为单例,但这听起来像是一种设计味道。
我看不出该方法应该是静态的。如果 Form2
需要了解 Form1
,那么它应该有一个对 Form1
实例的引用。
或者,如果 Form2
不应该知道 Form1
,但 Form1
知道 Form2
,那么 Form2
可以触发一个事件,它发出信号 Form1
关闭。