【问题标题】:how would I show the original Form2 from inside Form1 when I press button on Form1 in C#当我在 C# 中按下 Form1 上的按钮时,如何从 Form1 内部显示原始 Form2
【发布时间】:2013-06-01 19:21:07
【问题描述】:
private void button1_Click(object sender, EventArgs e)
    {
        Form2.Show();
    }

我认为上面的代码没有错误,但由于某种原因它不会执行。 它说错误“非静态字段、方法或属性需要对象引用”但我错过了什么? 我只有两个表单(Form1 和 Form2)和一个按钮。我使用了注册表清洁器,但错误仍然存​​在。 存在另一个有效的代码,但是这段代码将我的表单复制为一个新变量,但我想像 Visual Basic 那样显示原始表单。

【问题讨论】:

  • (new Form2()).Show();
  • 你必须改掉从 vb.net 上养成的一些坏习惯。像这个一样,如果不提供对对象的引用,就不能调用像 Show() 这样的实例方法。不幸的是,VB.NET 在 Form 类的特定情况下允许这样做,让 VB6 程序员可以编写 Winforms 代码。这在 C# 中已经结束并完成了,您必须使用 new 运算符来创建该类的新实例。

标签: c# winforms forms show


【解决方案1】:

除了在类级别存储对表单的引用之外,您还需要检查自上次使用以来它是否已关闭。在这种情况下,您需要创建一个新实例(就像您第一次使用一样)。如果表单被最小化,下面的示例也会恢复表单:

public partial class Form1 : Form
{

    Form2 F2 = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (F2 == null || F2.IsDisposed)
        {
            F2 = new Form2();
            F2.Show();
        }
        else
        {
            if (F2.WindowState == FormWindowState.Minimized)
            {
                F2.WindowState = FormWindowState.Normal;
            }
            F2.Activate();
        }
    }

}

【讨论】:

    【解决方案2】:

    Form2 或 Form1 只是类的名称。在使用这些类之前,您需要创建它们的实例

    Form2 secondaryForm = new Form2();
    

    在此之后,您可以使用该类secondaryForm.Show();的所有方法和属性

    因此,在使用/显示您的 Form2 之前,您需要创建一个实例。如果你想显示

    你的原始表格

    ,表示该实例已经创建。您需要检查创建该实例的代码并将对该表单的引用放入变量中:

    在Form1中创建一个变量:

    private Form2 secondaryForm;
    

    在您已经创建原始 Form2 的代码中,只需使用此变量:

    this.secondaryForm = new Form2();
    

    在 Form1 代码中的任何位置之后,您都可以在下一行显示 Form2:

    this.secondaryFomr.Show();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多