【问题标题】:C# “does not contain a constructor that takes '1' arguments”C#“不包含带有 '1' 参数的构造函数”
【发布时间】:2013-10-27 17:08:06
【问题描述】:

我已阅读此站点上与此错误相关的一些帖子,但我仍然不知道如何执行此操作 - 我对 C# 还是很陌生。

我正在尝试将多个文本框数据(只有 2 个开始)从 Form1 传递到 Form3(Form2 将是在我开始工作后添加的中介)这个想法是创建几个将数据传递到最后一个表单的表单并使用标签显示,此时是 Form3,然后 Form3 会将所有内容保存到文件或数据库中。希望这是有道理的。

所以,这是我的代码中的几个 sn-ps:

在 Form1 上我有:

    public Form1()
    {
        InitializeComponent();
    }

    private void nextBtn_Click(object sender, EventArgs e)
    {
        Form3 a = new Form3(firstNameTxtBox.Text);
        a.Show();

        Form3 b = new Form3(lastNametextBox.Text);
        b.Show();

        this.Hide();
    }

在 Form3 上我有:

    public partial class Form3 : Form
    {
        public Form3(string a, string b)
        {
           InitializeComponent();
           firstNameLbl.Text = a;
           lastNameLbl.Text = b;
        }
    }

现在,如果我取出字符串 b,它可以正常工作,请问我做错了什么?

【问题讨论】:

    标签: c# visual-studio-2010


    【解决方案1】:

    这里

    Form3 a = new Form3(firstNameTxtBox.Text);
    

    您正在使用一个参数调用 Form3 构造函数。

    正如错误所解释的,Form3 不包含采用单个参数的构造函数。这就是为什么当您从构造函数中删除第二个参数时,错误就会消失。

    你有两个选择:

    1) 移除第二个构造函数参数。

    public Form3(string a)
    {
        InitializeComponent();
        firstNameLbl.Text = a;
    }
    

    2) 将第二个参数添加到您调用Form3 构造函数的所有位置。

    如果您需要第二个构造函数参数,我建议使用选项 2。

    例如:

    Form3 a = new Form3(firstNameTxtBox.Text, lastNametextBox.Text);
    

    您的最终 Form1 代码如下所示:

    public Form1()
    {
        InitializeComponent();
    }
    
    private void nextBtn_Click(object sender, EventArgs e)
    {
        Form3 a = new Form3(firstNameTxtBox.Text, lastNametextBox.Text);
        a.Show();
    
        this.Hide();
    }
    

    【讨论】:

      【解决方案2】:

      我想你是这个意思

      Form3 a = new Form3(firstNameTxtBox.Text, lastNametextBox.Text);
      a.Show();
      

      编译器说Form3 没有带有 1 个参数的构造函数。是真的。

      public Form3(string a, string b)
      

      这需要两个参数。所以你必须传递两个参数。

      当您说 new Form3(firstNameTxtBox.Text); 时,您将参数传递给参数 string a 编译器说您还必须传递 string b

      附带说明:不要命名变量和类型名称,如abForm1 等。变量的用途应通过名称本身公开。

      【讨论】:

        【解决方案3】:

        您没有提供第二个值。它需要2个参数。

        Form3 a = new Form3(firstNameTxtBox.Text,lastNametextBox.Text);
        

        【讨论】:

          【解决方案4】:

          正如您所说,如果您有 N 个表格,那么日期 Exchange 可能是,我认为,除了将其保存在文件中之外,您还可以使用带有 get/set 之类的静态类

          让我们有一个新的类GlobalClass

            public static class GlobalClass
              {
              public static string firstNameTxtBox
              { set; get; }
          
          
              public static string SecondNameTxtBox
              { set; get; }
              }
          

          你可以从任何形式设置(应注意命名空间)

          @Form1

          GlobalClass.firstNameTxtBox="This is From 1stForm";
          

          @Form2

          GlobalClass.SecondNameTxtBox="This is From Second Form";
          

          【讨论】:

            【解决方案5】:

            公开 firstNameLbllastNameLbl 然后像这样启动新表单:

            var f3= new Form3();
            f3.firstNameLbl.Text = firstNameTxtBox.Text;
            f3.lastNameLbl.Text = lastNametextBox.Text;
            f3.Show();
            

            【讨论】:

            • 构造函数参数通常是必需的属性或字段。按照您的建议使用属性会使名字和姓氏成为非必填字段。您可以在不设置属性的情况下实例化该类。
            猜你喜欢
            • 1970-01-01
            • 2022-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-05
            相关资源
            最近更新 更多