我有一个标签控件,我可以在其中添加由按钮和下方标签制作的自定义控件。我想在我的项目中添加一个搜索功能,以便当用户键入控件的名称时,它将显示名称(标签)以键入的字母开头的所有控件。同时输入文本框也可以完成这项任务。有没有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
您可以在父控件集合中搜索控件:
foreach(Control c in ParentControl.Controls)
{
if(c.Name == "label1")
{
//add to your list
}
}
您还可以使用StartsWith("stringVal")
if(c.Name.StartsWith("l"))
{
//add to your list
}
答案 1 :(得分:1)
private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
// Skip, if the control is the used TextBox
if (control == textBox1) { continue; }
// Show all controls where name starts with inputed string
// (use ToLower(), so casing doesnt matter)
if (control.Name.ToLower().StartsWith(textBox1.Text.Trim().ToLower()))
{
control.Visible = true;
}
// Hide objects that doesn't match
else { control.Visible = false; }
}
}
切换控件'可见性,并隐藏与给定输入不匹配的所有项目。套管也无关紧要。
答案 2 :(得分:0)
在文本框中添加要搜索的文本时完成。
private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach (Control c in fl_panel.Controls)
{
if (c.Name.ToUpper().StartsWith(textBox1.Text.ToUpper().ToString()) && textBox1.Text != "")
{
Control[] ctrls = fl_panel.Controls.Find(textBox1.Text.ToString(), true);
c.Visible = true; // to restore previous matches if I delete some text
}
else if(textBox1.Text == "")
{
c.Visible = true;
}
else
{
c.Visible = false;
}
}
}
答案 3 :(得分:0)
你可以尝试这个来找到与文本框中输入的文字相匹配的控件,之后你可以用它做任何你想做的事。
private void textBox1_TextChanged(object sender, EventArgs e)
{
var controlMatchesCriteria = from c in this.Controls.OfType<TextBox>()
where c.Name == textBox1.Text
select c;
}