C# 单击按钮后如何创建新的文本框?

C# 单击按钮后如何创建新的文本框?,c#,button,C#,Button,我想写一个程序,一旦点击按钮3,它将创建一个新的文本框。 出于某种原因,C#无法识别txtRun。它表示当前上下文中不存在名称txtRun。这是我的密码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Thr

我想写一个程序,一旦点击按钮3,它将创建一个新的文本框。 出于某种原因,C#无法识别txtRun。它表示当前上下文中不存在名称txtRun。这是我的密码:

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

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

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += "a";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text += "b";
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

          txtRun = new TextBox();
          txtRun.Name = "txtDynamic";
          txtRun.Location = new System.Drawing.Point(20, 18);
          txtRun.Size = new System.Drawing.Size(200, 25);
          // Add the textbox control to the form's control collection         
              this.Controls.Add(txtRun);
      }

        }



        }
    }
}

在使用之前,您需要在C#中声明一个变量

使用其中一个

TextBox txtRun = new TextBox();
或使用变量:

var txtRun = new TextBox();

在使用之前,您需要在C#中声明一个变量

使用其中一个

TextBox txtRun = new TextBox();
或使用变量:

var txtRun = new TextBox();

可能问题在于您没有声明类型

var txtRun = new TextBox();

可能问题在于您没有声明类型

var txtRun = new TextBox();

除了给出的答案和查看您提供的代码片段外,您似乎还有太多的右大括号。更具体地说,最后两个-您不需要这些。

除了给出的答案和查看您提供的代码片段之外,您似乎有太多的右大括号。更具体地说,最后两个-您不需要这些。

问题:

出于某种原因,C#无法识别txtRun。它表示当前上下文中不存在名称txtRun

答复:

在你的声明中

txtRun = new TextBox();
您已创建变量txtRun,但尚未为其指定类型。就像创建字符串或int TextBox一样,在txtRun之前,也必须使用类TextBox的名称

TextBox txtRun = new TextBox();
您还可以用var替换单词TextBox,让编译器为您猜测

这将解决你眼前的问题

然而,这里真正的问题是,如果用户要无限次地单击按钮,您将创建无限多的文本框。另外,你可能没有意识到,但第二次按下按钮时,它会在原始文本下方放置一个文本框,因此你可能没有意识到,因为你在其中键入的文本将保留下来,但我向你保证,你正在创建一堆文本框,这是不好的。我不确定你到底完成了什么取决于你的场景,你可以用两种不同的方式来实现

场景1(您只需要一个动态创建的文本框)

创建一个变量以检查文本框是否已创建,因此它只生成一个。 *注意,您确实应该在click方法之外创建或调用TextBox,因为这样会丢失它的作用域

场景2(您希望动态创建多个文本框)

创建文本框列表或数组,以便更容易跟踪动态创建的文本框 使用诸如FlowLayoutPanel或TableLayoutPanel之类的工具来处理文本框的放置,特别是如果您想将它们做成网格或确保每个新文本框的位置都是唯一的。 *注意,您仍然应该在click方法之外创建或调用TextBox,因为这样会丢失它的作用域

如果您需要,请告诉我,我将详细介绍任何情况。

问题:

出于某种原因,C#无法识别txtRun。它表示当前上下文中不存在名称txtRun

答复:

在你的声明中

txtRun = new TextBox();
您已创建变量txtRun,但尚未为其指定类型。就像创建字符串或int TextBox一样,在txtRun之前,也必须使用类TextBox的名称

TextBox txtRun = new TextBox();
您还可以用var替换单词TextBox,让编译器为您猜测

这将解决你眼前的问题

然而,这里真正的问题是,如果用户要无限次地单击按钮,您将创建无限多的文本框。另外,你可能没有意识到,但第二次按下按钮时,它会在原始文本下方放置一个文本框,因此你可能没有意识到,因为你在其中键入的文本将保留下来,但我向你保证,你正在创建一堆文本框,这是不好的。我不确定你到底完成了什么取决于你的场景,你可以用两种不同的方式来实现

场景1(您只需要一个动态创建的文本框)

创建一个变量以检查文本框是否已创建,因此它只生成一个。 *注意,您确实应该在click方法之外创建或调用TextBox,因为这样会丢失它的作用域

场景2(您希望动态创建多个文本框)

创建文本框列表或数组,以便更容易跟踪动态创建的文本框 使用诸如FlowLayoutPanel或TableLayoutPanel之类的工具来处理文本框的放置,特别是如果您想将它们做成网格或确保每个新文本框的位置都是唯一的。 *注意,您仍然应该在click方法之外创建或调用TextBox,因为这样会丢失它的作用域

如果您需要,请告诉我,我将详细介绍任何情况。

尝试使用

  var txtRun = new TextBox();
  txtRun.Name = "txtDynamicTemp";
  txtRun.Location = new System.Drawing.Point(20, 18);
  txtRun.Size = new System.Drawing.Size(200, 25);
  // Add the textbox control to the form's control collection         
      this.Controls.Add(txtRun)
)

试试看

  var txtRun = new TextBox();
  txtRun.Name = "txtDynamicTemp";
  txtRun.Location = new System.Drawing.Point(20, 18);
  txtRun.Size = new System.Drawing.Size(200, 25);
  // Add the textbox control to the form's control collection         
      this.Controls.Add(txtRun)

)

您还需要为每个新文本框指定一个不同的位置(),否则每次单击按钮3时,新文本框将位于前一个文本框的顶部我建议使用诸如FlowLayoutPanel或TableLayoutPanel之类的工具来分配不同的位置,因为这可能会变得非常麻烦和浪费时间,特别是如果您只希望它采用类似网格的格式。您还需要为每个新的文本框指定不同的位置()否则,每次单击按钮3时,新的文本框都会位于前一个文本框的顶部,最终会有一个大的堆栈。我建议使用诸如FlowLayoutPanel或TableLayoutPanel之类的工具来分配不同的位置,因为这可能会变得非常麻烦,浪费时间,特别是如果您只希望它采用网格格式的话。