【发布时间】:2016-12-21 06:42:13
【问题描述】:
我们有一个基于 C# Windows 窗体的应用程序,其中有一个面板(用于联系人),其中包含多个控件(如姓名、ID、电话等)。我们添加了一个文本搜索(包括姓名、ID、电话等),通过循环(for 循环)每个控件来显示任何匹配的联系人控件。
这很好用,但如果我们有更多的联系人(比如超过 100 个,即总共 100 个面板),则需要更多时间。在这种情况下是否有任何替代方法可以加快搜索速度?
编辑:
下面是代码
Filter(Control Pls, string search)
{
foreach (Control ctrl in Pls.Controls)
{
var Name = ctrl.Controls.Find("name", true);
if ((Name != null) && (Name.Length != 0))
{
Label n = (Label)Name[0];
contactName = n.Text;
}
var Extn = ctrl.Controls.Find("extn", true);
if ((Extn != null) && (Extn.Length != 0))
{
Label e = (Label)Extn[0];
contactExtn = e.Text;
} if (contactName != null && contactExtn != null)
{
if (contactName.Contains(search) || contactExtn.Contains(search))
{
ctrl.Show();
}
else
{
ctrl.Hide();
}
}
else
{
ctrl.Hide();
}
}
}
【问题讨论】:
-
如果你得到匹配的值,然后打破你的循环,搜索你可以使用弹性搜索方法,它包含索引概念,它肯定会加快你的搜索速度。
-
我无法退出循环,因为我必须显示所有匹配的联系人。
-
你试过 linq 吗?
-
每个联系人是否在面板或用户控件上都有自己的控件?
-
我还没有尝试过 linq。每个联系人面板中至少有五个控件。