在运行时搜索控件的功能

时间:2014-05-20 08:01:02

标签: c# winforms search tabcontrol

我有一个标签控件,我可以在其中添加由按钮和下方标签制作的自定义控件。我想在我的项目中添加一个搜索功能,以便当用户键入控件的名称时,它将显示名称(标签)以键入的字母开头的所有控件。同时输入文本框也可以完成这项任务。有没有一种简单的方法可以做到这一点?

4 个答案:

答案 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;
}