调用静态方法关闭表单

Invoke static method to close form

我有两个 Windows 表格 - Form1Form2。我需要通过 Form2 中的按钮单击事件关闭 Form1Form1里面的方法是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-tonMulti-ton 个概念。是否需要转换 class 或者有任何简单的方法来处理这个?

编辑

Form1Form2 可以有多个实例。考虑以下情况。

即,当用户单击 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 关闭。