我正在学习c#。我想动态创建一些控件。这是我试图在表单上动态创建新元素的代码,但它没有做任何事情。请帮我解决这个问题。
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 Sampless
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int n = 4;
private void btnDisplay_Click(object sender, EventArgs e)
{
TextBox[] textBox = new TextBox[n];
Label[] label = new Label[n];
for (int i = 0; i < n; i++)
{
textBox[i] = new TextBox();
textBox[i].Name = "n" + i;
textBox[i].Text = "n" + i;
label[i] = new Label();
label[i].Name = "n" + i;
label[i].Text = "n" + i;
}
for (int i = 0; i < n; i++)
{
this.Controls.Add(textBox[i]);
this.Controls.Add(label[i]);
}
}
}
}
答案 0 :(得分:7)
您将所有控件添加到彼此之上,这就是为什么看起来只有其中一个。您需要将它们放在某种基于布局的控件/面板(例如FlowLayoutPanel
)中,它将根据您需要的布局类型自动将结构放置在适当的位置。
答案 1 :(得分:1)
我刚在Visual Studio中编写了一个快速的C#项目。下面的代码在表单中添加了一个新的文本框。
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 WindowsFormsApplication3
{
public partial class Form1 : Form
{
TextBox txtBox;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
txtBox = new TextBox();
txtBox.Location = new Point(10, 50);
txtBox.Visible = true;
Controls.Add(txtBox);
}
}
}
------------------------------------------ ADDED ---- ---------------------------------
下面的代码将添加4个文本框和4个标签,就像您想要的那样。你可以看到图片(在代码的最后),它在我的例子中的显示方式。
P.s。:您需要正确配置位置。
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 WindowsFormsApplication3
{
public partial class Form1 : Form
{
TextBox[] txtBox;
Label[] lbl;
int n = 4;
int space = 20;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
txtBox = new TextBox[n];
lbl = new Label[n];
for (int i = 0; i < n; i++)
{
txtBox[i] = new TextBox();
txtBox[i].Name = "n" + i;
txtBox[i].Text = "n" + i;
lbl[i] = new Label();
lbl[i].Name = "n" + i;
lbl[i].Text = "n" + i;
}
for (int i = 0; i < n; i++)
{
txtBox[i].Visible = true;
lbl[i].Visible = true;
txtBox[i].Location = new Point(40, 50 + space);
lbl[i].Location = new Point(10, 50 + space);
this.Controls.Add(txtBox[i]);
this.Controls.Add(lbl[i]);
space += 50;
}
}
}
}
屏幕截图:http://shrani.si/f/1F/Y/22BgTuBX/example.png
我也花时间把我上传的项目上传到Sendspace。
答案 2 :(得分: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 Sampless
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int n = 4;
private void btnDisplay_Click(object sender, EventArgs e)
{
TextBox[] textBox = new TextBox[n];
Label[] label = new Label[n];
int labelX, labelY, textboxX, textboxY;
labelX = 20;
labelY = 20;
textboxX = 50;
textboxY = 20;
for (int i = 0; i < n; i++)
{
textBox[i] = new TextBox();
textBox[i].Name = "n" + i;
textBox[i].Text = "n" + i;
textBox[i].Location = new Point(textboxX, textboxY);
label[i] = new Label();
label[i].Name = "n" + i;
label[i].Text = "n" + i;
label[i].Location = new Point(labelX, labelY);
labelY += 25;
textboxY += 25;
}
for (int i = 0; i < n; i++)
{
this.Controls.Add(textBox[i]);
this.Controls.Add(label[i]);
}
}
}
}
文本框和标签将显示在2列中,每行添加25个Y值。
答案 3 :(得分:0)
数组创建调用只是将元素初始化为null。您需要单独创建它们。 试试这个
TextBox[] txtTeamNames = new TextBox[teams];
for (int i = 0; i < txtTeamNames.Length; i++) {
var txt = new TextBox();
txtTeamNames[i] = txt;
txt.Name = name;
txt.Text = name;
txt.Location = new Point(172, 32 + (i * 28));
txt.Visible = true;
}
答案 4 :(得分:0)
是首先定义您要在页面中添加控件的位置,并在该主控件上添加控件。 示例页面有一个面板,它的名称是pnl1,所以请使用如下
pnl1.Controls.Add(textBox[i]);
pnl1.Controls.Add(label[i]);
答案 5 :(得分:0)
namespace Sample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
TextBox txbx = new TextBox();
private void button1_Click(object sender, EventArgs e)
{
AddNewTextBox();
txbx = new TextBox();
txbx.Location = new Point(10, 20);
txbx.Visible = true;
Controls.Add(txbx);
}
}
}