C# 无法从其他窗体关闭窗体

C# 无法从其他窗体关闭窗体,c#,forms,hide,C#,Forms,Hide,也许这真的是个愚蠢的问题,但我无法关闭表单 这就是我想做的: 启动主窗体->打开第二窗体->打开第三窗体并关闭第二窗体 我使用此代码打开第二个表单: this.Hide(); System.Threading.Thread.Sleep(200); pauzescreen p = new pauzescreen(); p.Show(); 我用这个代码打开第三个表单: this.WindowState = FormWindowState.Maximized; Form1 form1 = new F

也许这真的是个愚蠢的问题,但我无法关闭表单

这就是我想做的: 启动主窗体->打开第二窗体->打开第三窗体并关闭第二窗体

我使用此代码打开第二个表单:

this.Hide();
System.Threading.Thread.Sleep(200);
pauzescreen p = new pauzescreen();
p.Show();
我用这个代码打开第三个表单:

this.WindowState = FormWindowState.Maximized;
Form1 form1 = new Form1();
form1.TopMost = true;
form1.Show();
form1.Activate();
然后我用下面的代码关闭第二个表单:问题是,这不起作用

pauzescreen pauze = new pauzescreen();
pauze.Hide();
无法很好地解释它,但它所做的是在第二个表单Pauzeform创建一个全屏截图,在第三个表单中,您可以选择一个区域


第二个表单和第三个表单没有边框,并且被最大化。

您正在创建两个单独的引用,以引用两个单独的表单:p和pauze。要关闭原始表单,您需要保留引用并调用close或Hide:


正如Sid指出的,主要问题是在编写时正在创建第二个表单的新实例

pauzescreen p = new pauzescreen();
当您试图在与表单实例化不同的代码部分关闭它时,一个合适的解决方案不是处理事件,而是通过将对象作为参数传递给尝试关闭的类或方法来保持对对象的引用


是一个如何在两个不同类中使用同一对象的示例。

我有一个多种形式的应用程序,我非常喜欢使用Program类

static class Program
{
    // declare the forms in the program member space
    static Form1 firstForm;
    static Form2 secondForm;
    static Form3 thirdForm;
}
我所做的是在Main方法中初始化表单

static void Main()
{
    firstForm = new Form1()
    // ... so on and so forth
}
然后,无论何时要显示或隐藏这些表单,请使用

// To hide a form, use its Hide method
Program.firstForm.Hide()

// To show a form, use its Show method
Program.secondForm.Show()

在你的代码中。它在我的应用程序中工作得很好

考虑买辆车。您选择购买特定型号的汽车。你不能买这个模型的概念,你必须买一个模型的例子,例如陈列室里的那个蓝色的。如果你买了那辆蓝色的车,那么你对它所做的一切只会发生在那辆蓝色的车上,而不会发生在陈列室里的其他车上。您的表单pauzescreen就像汽车的模型,而p和pauze就像汽车的展厅示例。为了关闭p,你必须在它上调用close,而不是在它的新版本上调用pauze.hmm…这不像我键入它时那样有意义。我理解它,但我从另一个表单关闭表单,然后从我开始它的地方。我还试图在主窗体中隐藏它,但这也不起作用。我可能会再看看窗体之间的依赖关系。理想情况下,它只能朝一个方向移动,例如,一个表单知道它打开的表单,但第二个表单不知道第一个表单。为了使第二个表单对它不应该知道的表单产生影响,您可能需要创建一些事件处理程序来将信息传递回第一个表单,以便它可以执行操作。
// To hide a form, use its Hide method
Program.firstForm.Hide()

// To show a form, use its Show method
Program.secondForm.Show()