gpt4 book ai didi

c# - ComboBox在字符串中搜索,而不仅仅是第一个字母

转载 作者:太空狗 更新时间:2023-10-29 23:50:20 26 4
gpt4 key购买 nike

我在项目的字符串中搜索组合框时遇到问题。我想缩小成员名单的范围。它们的格式是这样的(唯一的成员(member) ID)- 名字 - 姓氏。

当我“按原样”保留所有设置时,它只会“允许”我搜索字符串中的第一个字符。

DataSource 是从一个列表中设置的,它是通过循环遍历文件夹中的所有文件而得到的。

我一直使用的代码如下(部分代码)

    private void searchForShooterComboBox_KeyUp(object sender, KeyEventArgs e)
{
//if(e => KeyCode == Keys::Down || e => KeyCode == Keys::Down)
//string comboBoxValue = searchForShooterComboBox.Text;
//searchForShooterComboBox.DataSource = null;
//searchForShooterComboBox.DataSource = fliterComboBox(searchForShooterComboBox, memberFileNames);
//searchForShooterComboBox.Text = comboBoxValue;
}

private void searchForShooterComboBox_TextChanged(object sender, EventArgs e)
{
searchForShooterComboBox.DataSource = null;
searchForShooterComboBox.DataSource = fliterComboBox(searchForShooterComboBox, memberFileNames);
}
private List<string> fliterComboBox(ComboBox cobx, List<string> stringList)
{
List<string> returnList = new List<string>();

if (cobx.Text != ""){
try
{
foreach (string s in stringList)
{
if (s.Contains(cobx.Text))
{
returnList.Add(s);
}
}
}catch{
}
}
return returnList;
}

我尝试的一些代码似乎可以过滤列表,但在方法运行后,它会将新列表中的第一项似乎填充到“文本字段”中,因此用户将无法继续输入一个名字,例如。

使用 ComboBox.Items.Add()ComboBox.Items.Remove() 而不是使用 DataSource 会有什么不同吗?

编辑:comboBox 数据源最初是在 form_load 事件处理程序中设置的。以下关于组合框的代码是:

searchForShooterComboBox.DropDownStyle = ComboBoxStyle.DropDown;
searchForShooterComboBox.AutoCompleteMode = AutoCompleteMode.Suggest;
searchForShooterComboBox.AutoCompleteSource = AutoCompleteSource.ListItems

感谢您花时间查看。

最佳答案

好吧,看来我自己想出了办法,不知道这是否是最好的方法,但似乎完成了工作:)

首先我将字符串添加到 ComboBox.items 中并进入 list<string> .以两种方式添加它们的原因是为了让用户在加载时看到所有可用选项。

            for (int i = 0; i < membersFiles.Length; i++)
{
searchForShooterComboBox.Items.Add(membersFiles[i].Replace(".txt", "").Replace(@"C:\Users\Nicolai\Desktop\skytter\", "").Replace("-", " "));
memberFileNames.Add(membersFiles[i].Replace(".txt", "").Replace(@"C:\Users\Nicolai\Desktop\skytter\", "").Replace("-", " "));
}

之后,我从属性窗口添加了一个 combobox_keydown 事件。

private void searchForShooterComboBox_KeyDown(object sender, KeyEventArgs e)
{
try
{
//checking if the key pressed is RETURN, in that case try to fill the combobox with the selected item,
//and continuing with other method
if (e.KeyValue == 13)
{
searchForShooterComboBox.Text = (string)searchForShooterComboBox.SelectedItem;
fillInfoInForm();
}
//making sure the key pressed IS NOT DOWN, UP, LEFT, RIGHT arrow key.
else if (e.KeyValue > 40 || e.KeyValue < 37)
{
filterComboBox(searchForShooterComboBox, searchForShooterComboBox.Text);
searchForShooterComboBox.Select(searchForShooterComboBox.Text.Length, 0);
searchForShooterComboBox.DroppedDown = true;
}
}
catch (FileNotFoundException ex) {
MessageBox.Show("Der blev ikke fundet nogen fil med flg. sti " + ex.FileName + "\nHusk at vælge hele navnet i listen, eller skriv det nøjagtigt som det står!");
}
}

使用此方法搜索列表项,清除组合框中的项,并添加匹配的项。

    private void filterComboBox(ComboBox cobx, string enteredSearch)
{
//clearing ComboBox items before adding the items from the LIST that meets the search
cobx.Items.Clear();

//looping over the items from the list, comparing them to the search from the combobox text field.
//if the item in the list does not contain the string searched it will return an index of -1.
for (int i = memberFileNames.Count-1; i >= 0; i--)
{
if (memberFileNames[i].IndexOf(enteredSearch, 0, StringComparison.CurrentCultureIgnoreCase) >= 0)
{
cobx.Items.Add(memberFileNames[i]);
}
}
}

如果您找不到正确的键值,请尝试查看 https://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keyvalue(v=vs.110).aspx并从那里复制粘贴代码,并将其添加到您的 key_down 事件处理程序中,它将在消息框中显示大部分信息(如果不是全部)。

这是我的解决方法,如果您有更好的方法,我会洗耳恭听:)

关于c# - ComboBox在字符串中搜索,而不仅仅是第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com