2016-11-29 49 views
0

在这个简单的代码中,我希望知道如何使用其实际地址(而不是this.Hide())调用表单,以便即使表单当前未处于活动状态,也可以关闭/隐藏表单。我的主要目的是隐藏Form2以单击按钮打开Form1,然后永久关闭Form2如何在C#中调用其地址?

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     Form2.Hide(); // This doesn't work 
    } 
} 
+0

那么,谁持有参考到'Form2'? –

+0

P/Invoke ........ –

+0

看到我的两个表单项目:http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng

回答

2

与Visual Basic不同,C#不保留表单引用。你需要自己保留它们。 Form2只是类型 - 它没有“默认参考”。主要思想不是“每种表单类型都有一个实例,隐藏并根据需要显示” - 它是“表单与其他任何对象一样 - 以与其他对象相同的方式创建和处理它们”。通常的工作流程不是Form1.Hide(); Form2.Show(); - 更像是Application.Run(new MainForm()); ... using (var form = new Form1()) { form.ShowDialog(); }。这并不意味着VB方法不能用于C# - 它只是意味着你必须自己实现它(或切换到VB.NET)。如果它是有道理的 - 设计已经有一段时间了,所以确保你有一个好的想法,你为什么以这种方式做事,而不仅仅是惯性。

这听起来像你真正的问题是,你试图实现某种向导,或通过多种形式的流。这意味着你应该使用向导,或者改变整个应用程序的构建方式。请致电program.cs。了解它的功能。当传递给Application.Run的表单关闭时,整个应用程序关闭。有很多方法可以重写,但我们无法以一般方式真正帮助您 - 我只能告诉您,如果您的应用程序不适合“主窗口+其他窗口”模型,则默认的应用程序设置为不会为你工作。

有人应该对您的两种表格的生命周期负责。我们无法真正地告诉你们 - 可能是其中一种形式,也许是主要形式,它以系列中的两种形式打开模态对话框。我们根本无法分辨 - 这是您需要解决的设计问题。但负责人也将在正确的时间点处理关闭和打开个人表格。

+2

使用'this' ..... –

+0

如何/我可以在哪里给我一个参考? – Zenektric

+0

@Zenektric - “How”<---通过使用窗体的构造函数来创建一个新实例。 “哪里”< - 你想要的任何地方。 –

1

thisForm2实例中的实际“地址”。如果你想从别的地方,你需要使用引用来调用它隐藏

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     Hide(); // or this.Hide() 
    } 
} 

:那么,把它藏在窗体本身做到这一点。像:

var f = new Form2(); 
f.Show(); 
// Do stuff with form 
f.Hide(); 
5

您不需要参考,因为您已经在窗体本身。 this,它指向的上下文类的当前实例,会做什么:

this.Hide(); 

或者,因为它知道上下文:

Hide(); 
+3

这是最好的答案,不知道为什么其他人都过分复杂的事情。 – ThePerplexedOne

+0

我隐藏form2来打开form1,然后我需要form2来关闭,而不是活动的,所以我不能用它来关闭它。 – Zenektric

+1

你的代码显示从Form2中隐藏'Form2'。这样做。没有“积极的一方”或类似的东西。只是目前。 –

1

如果您在Form2工作只是用this

public Form2() 
    { 
     InitializeComponent(); 
     this.Hide(); 
    } 

您还可以使用:

public Form2() 
     { 
      InitializeComponent(); 
      Hide(); 
     } 

你不需要调用类似Form2 form = new Form2();只有当你以另一种形式的工作,例如像这样:

public Form1() 
     { 
      Form2 form = new Form2(); 
      form.Show(); //or form.Hide(); 

     } 
相关问题