【问题标题】:Show a new form when click a button单击按钮时显示新表单
【发布时间】:2012-07-30 23:27:27
【问题描述】:

我是 C# 新手。当单击 form1 中的按钮时,我试图显示一个新表单 (form2)。

这是我的代码。

        using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SliceEngine
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void button5_Click(object sender, EventArgs e)
        {   
            Form2 form2 = new Form2();
            form2.ShowDialog();            
         }
    }
}

错误显示

找不到类型或命名空间名称“Form2”(您是否缺少 using 指令还是程序集引用?)

这是我的 form2 代码。

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SliceEngine
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }
    }
}

form2,我只是做设计界面。

我知道使用 java 时,我只需要先声明对象。我该怎么办?

【问题讨论】:

  • 您是否在项目中创建了Form2 表单?
  • 请确认您的代码中存在Form2。请记住,文件名并不总是与其中的类相关,因此请务必仔细检查。
  • 仅供参考:您不会“调用”表单,而是显示或显示表单。
  • @sarabrown,能否请您发布您的两个代码示例,以便我们看看发生了什么?
  • Form2 是否与 Form1 在同一个项目中(不仅仅是同一个解决方案)?您实际上是复制+粘贴此代码,还是您输入了它?如果这不是您的全部代码,您可能已经隐藏了问题。

标签: c# winforms


【解决方案1】:

我看不出有任何理由让您的代码失败,除非您有任何拼写错误。我已经尝试了与您相同的代码,并且在我的机器上运行良好。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace winapp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.ShowDialog();
            }
        }




    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace winapp
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
        }
    }

【讨论】:

    【解决方案2】:

    找不到类型或命名空间名称“Form2”(您是否缺少 using 指令还是程序集引用?)

    这意味着你忘记将指向Form2目录的命名空间添加到你的代码中

    如果您在名为UI 的目录中有Form2.cs,并且该目录位于MyForms 目录中,那么整个树将是ProjectName >> @ 987654326@ >> UI >> Form2.cs

    所以你应该在你的代码中使用这个命名空间

    using ProjectName.MyForms.UI;
    

    现在我应该可以轻松开始显示它了,因为我已经添加了它的位置。

    new Form2().Show();
    

    OR 而不是所有这些并费心添加命名空间,您可以使用:

    new ProjectName.MyForms.UI.Form2().Show();
    

    【讨论】:

      【解决方案3】:

      在 form1 中,您正在使用 Form2 的构造函数:

      public partial class Form1 : Form
      {
          public Form2()
          {
              InitializeComponent();
          }
      

      如果你把它改成

      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
      

      你应该没事的。

      【讨论】:

      • 我很抱歉。我在这篇文章中略有输入错误。我的真实代码和你的一样。你能帮我吗,请@competent_tech
      【解决方案4】:

      您的代码声称您没有Form1 的构造函数。

       public partial class Form1 : Form
          {
              public Form2()
              {
                  InitializeComponent();
              }
      

      应该是:

       public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
              }
      

      【讨论】:

      • 对不起。我的真实代码是正确的。就像你说的那样。我在这篇文章中输入错误。你能再帮我一次吗? @Chibueze Opata
      【解决方案5】:

      我认为下面一定是您的代码失败的原因。 您在 Form1 和 Form2 中都有您的表单,其中 Form2 定义是在另一个命名空间指令中完成的,该指令未集成在 Form1 的命名空间中,除非您覆盖它们,否则您不能为两个命名空间使用相同的命名空间指令名称。

      【讨论】:

        【解决方案6】:

        试试这个代码.....

        private void button1_Click(object sender, EventArgs e)
        {
               Form2 frm2 = new Form2();
               {
                  frm2.ShowDialog();
               }
        }
        

        【讨论】:

          【解决方案7】:
          private void button5_Click(object sender, EventArgs e)
          {   
            Form2.show()
          }
          

          【讨论】:

            【解决方案8】:

            我的解决方案:

            在 Form1 的点击事件中包含您的按钮:

            string foobar = "Hello world";
            Form2 frm2 = new Form2(foobar);
            frm2.ShowDialog();
            

            在 Form2 中:

            public Form2(string foobar)
            {
                InitializeComponent();
                textbox1.Text = foobar;
            }
            

            【讨论】:

              【解决方案9】:

              对于仍在寻找答案的任何人:

              在代码的顶部,添加这个命名空间:

              using YourProjectName;
              

              然后,当您希望显示表单时,输入以下内容:

              var form = YourProjectName.YourFormName();
              form.Show(); // Show form using new variable
              

              【讨论】:

              • 因为实现了 IDisposable,所以 Id 将实例化包装在 using() 中。使用(var form = new YourFormName()) { form.ShowDialog(); }
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-01-05
              • 1970-01-01
              • 2013-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多