我现在有点蠢,我创建了一些代码,创建了4个文本框,并在运行时将它们添加到表格布局中(下面的代码),但我正在努力获取文本从它,我尝试从它string s = TxtBox1.Text.ToString();
获取它的值,但它只是获得一个空引用,然后我尝试txt.Text.ToString();
,这只是从最后创建的文本框中获取文本。 / p>
private void button2_Click(object sender, EventArgs e)
{
int counter;
for (counter = 1; counter <= 4; counter++)
{
// Output counter every fifth iteration
if (counter % 1 == 0)
{
AddNewTextBox();
}
}
}
public void AddNewTextBox()
{
txt = new TextBox();
tableLayoutPanel1.Controls.Add(txt);
txt.Name = "TxtBox" + this.cLeft.ToString();
txt.Text = "TextBox " + this.cLeft.ToString();
cLeft = cLeft + 1;
}
我已经全神贯注地寻找答案了,但是如果有人有任何想法我会感激不尽。
由于
答案 0 :(得分:6)
此代码从tableLayoutPanel1中选择textbox1,将其从Control转换为TextBox并获取Text属性:
string s = ((TextBox)tableLayoutPanel1.Controls["TxtBox1"]).Text;
如果你需要它们,那么迭代文本框:
string[] t = new string[4];
for(int i=0; i<4; i++)
t[i] = ((TextBox)tableLayoutPanel1.Controls["TxtBox"+(i+1).ToString()]).Text;
答案 1 :(得分:2)
你可以尝试
var asTexts = tableLayoutPanel1.Controls
.OfType<TextBox>()
.Where(control => control.Name.StartsWith("TxtBox"))
.Select(control => control.Text);
这将枚举tableLayoutPanel1的所有子控件的Text值,其类型为TextBox,其名称以“TxtBox”开头。 您可以选择放宽过滤器,删除OfType行(不包括任何非TextBox控件)或Where行(仅允许控件名称与您的示例匹配)。
确保
Using System.Linq;
在文件的开头。 问候, 丹尼尔。
答案 2 :(得分:1)
public void AddNewTextBox()
{
txt = new TextBox();
tableLayoutPanel1.Controls.Add(txt);
txt.Name = "TxtBox" + this.cLeft.ToString();
txt.Text = "TextBox " + this.cLeft.ToString();
cLeft = cLeft + 1;
txt.KeyPress += txt_KeyPress;
}
private void txt_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//the sender is now the textbox, so that you can access it
System.Windows.Forms.TextBox textbox = sender as System.Windows.Forms.TextBox;
var textOfTextBox = textbox.Text;
doSomethingWithTextFromTextBox(textOfTextBox);
}