在这个简单的代码中,我想知道如何使用其实际地址(而不是this.Hide()
)调用表单,这样即使表单当前未处于活动状态,我也可以关闭/隐藏它。我的主要目的是在点击按钮时隐藏Form2
以打开Form1
,然后永久关闭Form2
。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Form2.Hide(); // This doesn't work
}
}
答案 0 :(得分:5)
您不需要参考,因为您已经在表单中。 this
,它指向上下文中当前类的实例,将执行:
this.Hide();
或者,因为它知道上下文:
Hide();
答案 1 :(得分:2)
与Visual Basic不同,C#不会为您保留表单引用。你需要自己保管。 __exit__
只是类型 - 它没有“默认引用”。主要思想不是“每个表单类型一个实例,隐藏并显示为必要” - 它的“表单就像任何其他对象一样 - 以与任何其他对象相同的方式创建和处理它们”。通常的工作流程不是Form2
- 它更像Form1.Hide(); Form2.Show();
。这并不意味着VB方法不能在C#中使用 - 它只是意味着你必须自己实现它(或切换到VB.NET)。如果它有意义 - 设计已经暂时被弃用了一段时间,所以要确保你很清楚为什么你这样做,而不仅仅是惯性。
听起来你真正的问题是你正在尝试实现某种向导,或者通过多种形式实现流程。这意味着您应该使用向导,或者更改整个应用程序的构建方式。
查看您的Application.Run(new MainForm()); ... using (var form = new Form1()) { form.ShowDialog(); }
。了解它的作用。传递给program.cs
的表单关闭后,整个应用程序将关闭。有很多方法可以重写这个,但我们无法以一般的方式真正帮助你 - 我可以告诉你的是,如果你的应用程序不适合“主窗口+其他窗口”模型,默认的应用程序设置是不会为你工作。
有人应对两种表格的生命周期负责。我们无法真正告诉你谁 - 也许是Application.Run
类,也许是其中一种形式,也许是打开系列中两种形式作为模态对话框的主要形式。我们根本无法分辨 - 这是你要解决的设计问题。但负责的人也会在正确的时间处理关闭和打开个人表格。
答案 2 :(得分:1)
this
是实际的地址'在Form2
的实例中。因此,将其隐藏在表单中本身就是这样做的:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Hide(); // or this.Hide()
}
}
如果要将其隐藏在其他地方,则需要使用引用将其调用。喜欢:
var f = new Form2();
f.Show();
// Do stuff with form
f.Hide();
答案 3 :(得分: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();
}