如何在C#中使用其地址调用表单?

时间:2016-11-29 14:22:21

标签: c# forms

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

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

4 个答案:

答案 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();

        }