我试图通过使用Control类的名称从textBox获取值? 有我的代码:
Control ctl = FindControl(this, "B1");
if (ctl is TextBox)
listBox1.Items.Add(((TextBox)ctl).Text);
//" B1" - 它的文本框名称
public static Control FindControl(Control parent, string ctlName)
{
foreach (Control ctl in parent.Controls)
{
if (ctl.Name.Equals(ctlName))
{
return ctl;
}
FindControl(ctl, ctlName);
}
return null;
}
问题是编译器没有进入该函数。 可能是什么问题?
答案 0 :(得分:0)
public Form1()
{
InitializeComponent();
B1.Text = "LOL";
Control ctl = FindControl(this, "B1");
if (ctl is TextBox)
listBox1.Items.Add(((TextBox)ctl).Text);
}
public static Control FindControl(Control parent, string ctlName)
{
foreach (Control ctl in parent.Controls)
{
if (ctl.Name.Equals(ctlName))
{
return ctl;
}
FindControl(ctl, ctlName);
}
return null;
}
如果你像上面的样本那样做,那么一切都是正确的。
我想你使用的是Windows Froms
附:我不能写评论,因为我没有50的声誉
正确答案
如果TextBox在FlowLayout上,则父级是FlowLayout,您需要使用FlowLayout名称而不是"这个" in line Control ctl = FindControl(this," B1");.因为"这个"它是MainWindow控件。
答案 1 :(得分:0)
尝试使用Control实例的ID属性。如果我们谈论System.Web.UI命名空间,我不确定Control属性的Name属性是否可用。
答案 2 :(得分:0)
对于WinForms,你只需:
Control ctl = this.Controls.Find("B1", true).FirstOrDefault();
if (ctl != null)
{
// use "ctl" directly:
listBox1.Items.Add(ctl.Text);
// or if you need it as a TextBox, then cast first:
if (ctl is TextBox)
{
TextBox tb = (TextBox)ctl;
// ... do something with "tb" ...
listBox1.Items.Add(tb.Text);
}
}
您不需要自己的递归搜索功能......