在C#中获取值动态文本框
本文关键字:动态 文本 获取 | 更新日期: 2023-09-27 18:23:56
我制作了动态文本框,并将其保留为List
private void ConvertButton_Click(object sender, EventArgs e)
{
List<TextBox> textBoxes = new List<TextBox>();
foreach (Control item in this.Controls)
{
if (item is TextBox)
{
TextBox txt = item as TextBox;
textBoxes.Add(txt);
}
}
}
我得到了所有文本框的值,但我有一个问题。例如:;如果用户添加3个像(A,B,C)这样的标签,并为它们添加像(labelA有2,labelB有3,labelC有1)这样的文本框,并且文本框得到像数组一样的值(Textboxes[0]有值)。问题是我不知道哪个标签有哪个值。
我添加了这样的文本框:
private void addNewTextbox(object sender, EventArgs e)
{
Button button = (Button)sender;
List<TextBox> textBoxes = button.Tag as List<TextBox>;
if (textBoxes == null)
button.Tag = textBoxes = new List<TextBox>();
TextBox textBox = new TextBox();
textBoxes.Add(textBox);
textBox.Location = new Point(90 * textBoxes.Count, button.Top);
textBox.Size = new Size(50, 50);
this.Controls.Add(textBox);
}
例如,我尝试显示屏幕;
LabelA-->Textbox1 , Textbox2
</br>
labelB -->Textbox3
</br>
LabelC --> Textbox4 , Textbox5 , TextBox6
添加的每个控件都有一个Name
属性。使用此属性可以将不同的控件链接在一起。例如(您应该想出自己的命名约定),您可以这样做:
标签A-->文本框A1、文本框A2
标签B-->文本框B1
标签C-->文本框C1、文本框C2、文本框C3
如果你想有一个更完整(即复杂)的解决方案,你可以:
- 创建从
TextBox
继承的自己的控件 - 为关联的
Label
控件的名称添加属性 - 在实例化新控件时设置此属性
Label[] labelArray = new Label[10];
for (int i = 0; i < labelNumber; i++)
{
labelArray[i] = new Label();
labelArray[i].Text = states[i] + "-->";
this.Controls.Add(labelArray[i]);
labelArray[i].Top = 100 + i * 30;
labelArray[i].Left = 10;
labelArray[i].Width = 30;
}
我创建的标签就是这样的。标签数量是用户想要的标签数量@拦截风
我很难理解你的问题,我想你是在试图将用户创建的文本框链接到特定的标签?如果我完全错了,请原谅我。把你的代码结构成这样怎么样:
注:使用OP的新代码编辑
Dictionary<Int, List<TextBox>> label_Textboxes_Dict = new Dictionary<Int, List<TextBox>>();
List<Label> labelArray = new List<Label>(); //I suggest use list as you don't know the array size beforehand
void addLabel(int labelNumber)
{
int currentLabelArrayCount = labelArray.count; //So that users can add multiple times
for (int i = currentLabelArrayCount; i < currentLabelArrayCount +labelNumber; i++)
{
labelArray.Add(new Label());
labelArray[i].Text = states[i] + "-->";
this.Controls.Add(labelArray[i]);
labelArray[i].Top = 100 + i * 30;
labelArray[i].Left = 10;
labelArray[i].Width = 30;
label_Textboxes_Dict.Add(i, new List<TextBox>());
}
}
void addTextBoxForLabel(int labelNum)
{
TextBox t1 = new TextBox();
TextBox t2 = new TextBox();
//etc...
if (label_Textboxes_Dict.ContainsKey(labelNum))
{
label_Textboxes_Dict[labelNum].Add(t1);
label_Textboxes_Dict[labelNum].Add(t2);
}
}
void doSomethingForAllTextboxesOfLabel(int labelNum)
{
List<TextBox> listOfTextBoxes;
if(label_Textboxes_Dict.TryGetValue(labelNum, out listOfTextBoxes))
{
foreach(TextBox tb in listOfTextBoxes)
{
//do your stuff
}
}
}