【发布时间】:2015-07-09 21:22:12
【问题描述】:
现在这听起来可能不是很神秘,但我对处理屏幕元素和Forms 等C# 有点陌生,所以请耐心等待。它也会有点长,因为我觉得我应该提供尽可能多的信息。
我有一个TextBox 对象,它被添加到我的fSelect(在这种情况下是我的Form),它是这样完成的:
TextBox searchBox = new TextBox();
fSelect.Controls.Add(searchBox);
searchBox.Location = new Point(40, 255);
searchBox.Width = 520;
searchBox.TextChanged += new EventHandler(searchBox_TextChanged);
现在,正如您所看到的,每当TextBox 中的某些内容发生变化时,都会执行某个操作。该操作将是:
private void searchBox_TextChanged(object sender, EventArgs e)
{
TextBox s = (TextBox)sender;
bool b = false;
List<string> f = new List<string>();
ListBox updatedLb = new ListBox();
updatedLb.Size = new System.Drawing.Size(568, 255);
updatedLb.SelectionMode = SelectionMode.MultiSimple;
foreach (string value in lb.Items)
{
if (value.IndexOf(s.Text, StringComparison.OrdinalIgnoreCase) >= 0)
{
f.Add(value);
b = true;
}
}
for (int i = 0; i < f.Count; i++)
{
updatedLb.Items.Add(f[i]);
}
s.FindForm().Controls.Remove(lb);
s.FindForm().Controls.Add(updatedLb);
}
查看该代码,有一个元素需要解释,lb。在这种情况下,lb 是 public ListBox,其中包含一定数量的 string 元素。它在任何方法之外定义为ListBox。
现在,在定义我的searchBox 的方法中,我填写了我的lb,如下所示:
foreach (string value in list)
{
lb.Items.Add(value.title);
}
(如果重要的话,我还应该提到 strings 到 lb 的添加发生在稍后插入 fSelect Form 之前。)
现在,对于那些还没有猜到我的问题的人;我希望向用户展示一个带有ListBox 的Form。此ListBox 中的元素将是包含用户键入searchBox 的string 的任何元素,因为用户键入它。
问题是,搜索只执行一次,并且唯一搜索的是用户在searchBox 中输入的第一个键。 IE:如果我是用户并且我要搜索“key”,并且第一个字母是“k”,则列表将更新以显示标题中带有“k”的任何内容。但是当我尝试输入“e”时,它不会更新或更改。如果用户删除searchBox 中的部分文本,它也不会恢复到旧列表。
我如何获得一个Form,它会根据用户输入searchBox 的内容向我显示ListBox 的元素?
【问题讨论】:
-
我好像中途停了一句话。脑残。现在清理了,对不起读者!
标签: c# forms search textbox listbox