点击按钮时显示新表单

9

我是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 的表单吗? - Blorgbeard
请确认您的代码中存在 Form2。请记住,文件名并不总是与其中的类相关联,因此请务必仔细检查。 - Connor Deckers
2
Form2是否与Form1在同一个项目中(不仅仅是同一个解决方案)?您是复制+粘贴此代码,还是手动输入的?如果这不是您的全部代码,则可能已隐藏问题。 - Blorgbeard
你确定你的表单在同一个程序集中吗?可能会出现命名空间相同,但包含Form1的项目没有引用其他项目的情况(如果它们确实是不同的项目)。 - kerzek
是否为以下重复问题?https://dev59.com/fW025IYBdhLWcg3w7qfL - Derek Johnson
显示剩余3条评论
9个回答

6

我认为你的代码没有问题,除非你有什么拼写错误。我已经尝试了与你相同的代码,在我的机器上运行良好。

    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();
            }
        }
    }

3
“类型或命名空间“Form2”未找到(是否缺少using指令或程序集引用?)”,这意味着您忘记将指向“Form2”目录的命名空间添加到您的代码中。如果您在名为“UI”的目录中有一个“Form2.cs”,并且该目录位于“MyForms”目录中,则整个树形结构应为ProjectName >> MyForms >> UI >> Form2.cs,因此您应该在您的代码中使用此命名空间。
using ProjectName.MyForms.UI;

现在我应该可以很容易地展示它,因为我已经添加了它的位置。
new Form2().Show();

或者,不必添加命名空间,您可以直接使用:

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

1
尝试使用这段代码......
private void button1_Click(object sender, EventArgs e)
{
       Form2 frm2 = new Form2();
       {
          frm2.ShowDialog();
       }
}

1
在form1中,您正在使用Form2的构造函数:
public partial class Form1 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

如果你将它改成

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

你应该没问题。


抱歉,我在这篇帖子中有些打字错误。我的真实代码与你的一样。请问@competent_tech能否帮助我解决这个问题? - sara brown

1

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

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

应该是:

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

对不起,我的真正代码是正确的。就像你说的那样。我在这篇文章中打错了字。你能再帮我一次吗?@Chibueze Opata - sara brown

1
我认为以下可能是您的代码失败的原因。 您的表单分别位于Form1和Form2中,其中Form2的定义在另一个命名空间指令中完成,该命名空间未集成到Form1的命名空间中,同时,除非您正在覆盖它们,否则不能将相同的命名空间指令名称用于两个命名空间。

0
我的解决方案:
在Form1的点击事件中包含您的按钮:
string foobar = "Hello world";
Form2 frm2 = new Form2(foobar);
frm2.ShowDialog();

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

0
private void button5_Click(object sender, EventArgs e)
{   
  Form2.show()
}

0

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

在您的代码顶部添加此命名空间:

using YourProjectName;

然后,当您想要显示表单时,请输入以下内容:

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

由于 for 实现了 IDisposable 接口,我会在 using() 中包装实例化过程。using(var form = new YourFormName()) { form.ShowDialog(); } - NTDLS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接