C# 无法打开第二个表单

C# 无法打开第二个表单,c#,.net,winforms,C#,.net,Winforms,我正试图用下面的代码打开第二个表单。它应该是有效的。但是我的项目出了点问题 Form2 newForm = new Form2(); newForm.Show(); 使用上述代码会显示一个错误 我添加了第二个表格(表格2)。问题应该是什么 错误:找不到类型或命名空间名称“Form2”(是否缺少using指令或程序集引用?如果出现form1,可以尝试打开Form2 双击form1和onload事件加载(对象发送器,…) Form2与Form1位于不同的命名空间中。您需要使用using指令 伪码

我正试图用下面的代码打开第二个表单。它应该是有效的。但是我的项目出了点问题

Form2 newForm = new Form2();
newForm.Show();
使用上述代码会显示一个错误 我添加了第二个表格(表格2)。问题应该是什么


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

如果出现form1,可以尝试打开Form2

双击form1和onload事件加载(对象发送器,…)


Form2与Form1位于不同的命名空间中。您需要使用using指令

伪码

// 1.st file, where the Form1 is declared:

// Place the using directive
using A2;

namespace A1
{
  public partial class Form1 : Form
  {
    public void ShowForm2()
    {
      Form2 newForm = new Form2();
      newForm.Show();

      // It works without the using directive aswell, while using following:
      A2.Form2 newForm = new A2.Form2();
      newForm.Show();
    }
  }
}

// 2.nd file, where the Form2 is declared:
namespace A2
{
  public partial class Form2 : Form
  {
    // Anything..
  }
}

您需要确保两者位于同一名称空间中,或者使用
Form1.cs
中的
语句添加

所以你可能有这样的想法:

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 newForm = new Form2();
            newForm.Show();
        }
    }
}  

将两者的名称空间更改为相同,或者使用
添加到
Form1.cs
中,如下所示:

using TestFormsApp_Different

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 newForm = new Form2();
            newForm.Show();
        }
    }
}

你必须决定哪种方法更适合你。两者在不同的情况下都有意义,但这是另一个主题。

图像似乎表明了错误(红色曲线)。。错误是什么?您可以指向红色错误下划线以获取错误消息。我想你还没有用过Form2declare@Esmaeli-也许他们不想要模态形式
Show()
非常有效。
Form1
Form2
的名称空间是什么?错误表明它们不同,并且在
Form1.cs
中没有
using
语句,只需右键单击代码中的Form2即可,选择“快速操作和重构”,并使用事件中运行的代码添加缺少的名称空间。事件中运行的代码正是不适用于OP的代码。唯一的区别是OP的事件称为
Form1\u Load\u 1
,这是完全有效的,并且在处理自动生成事件时也可能发生,一个是双重生成的。这不能解决任何问题。是的,两种选择都有效。OP不需要向Form1添加using语句,但也不需要使它们具有相同的命名空间。有时,根据每件事情的最佳组织方式,只需执行其中一项或另一项就可以了。他们不需要添加using指令。这只是一种方法。这可能不适合他们的情况。在我的代码中,还演示了另一种(并非所有可能的)方法。无论如何,这个问题有几个正确的答案。
namespace TestFormsApp_Different
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    }
}  
using TestFormsApp_Different

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 newForm = new Form2();
            newForm.Show();
        }
    }
}