如何使过滤器不区分大小写?

时间:2013-10-16 06:17:57

标签: c# filter listbox uppercase

我正在为学校做一个ITP项目。在这个项目中,我这样做,当我在列表框中添加一个单词时,有一个过滤器在列表框中搜索单词,如果匹配为假,则将单词添加到列表中。但是这个过滤器不区分大小写,这意味着它会添加单词audi,即使有奥迪,但由于第一个字母是大写,过滤器不会检测到这一点。这个位的代码是

private void btnAddWord_Click(object sender, EventArgs e)
    {
        if (this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text) == false)
        {
            //if the textbox is empty
            if (tbxAddWord.Text == "")
            {
                MessageBox.Show("You have entered no value in the textbox.");
                tbxAddWord.Focus();
            }
            //if the number of items in the listbox is greater than 29
            if (lbxUnsortedList.Items.Count > 29)
            {
                MessageBox.Show("You have exceeded the maximum number of values in the list.");
                tbxAddWord.Text = "";
            }

            //if the number of items in the listbox is less than 29
            else
            {

                //add word to the listbox
                this.lbxUnsortedList.Items.Add(this.tbxAddWord.Text);
                //update tbxListBoxCount
                tbxListboxCount.Text = lbxUnsortedList.Items.Count.ToString();
                //onclick, conduct the bubble sort
                bool swapped;
                string temp;
                do
                {
                    swapped = false;
                    for (int i = 0; i < lbxUnsortedList.Items.Count - 1; i++)
                    {
                        int result = lbxUnsortedList.Items[i].ToString().CompareTo(lbxUnsortedList.Items[i + 1]);
                        if (result > 0)
                        {
                            temp = lbxUnsortedList.Items[i].ToString();
                            lbxUnsortedList.Items[i] = lbxUnsortedList.Items[i + 1];
                            lbxUnsortedList.Items[i + 1] = temp;
                            swapped = true;
                        }
                    }
                } while (swapped == true);
                tbxAddWord.Text = "";
            }
        }
        if (this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text) == true)
        {
            MessageBox.Show("The word that you have added is already on the list");
            tbxAddWord.Text = "";
            tbxAddWord.Focus();
        }

    }

我想知道如何使这个案例不敏感,以便即使第一个字母是大写的,过滤器也会拾取奥迪。

5 个答案:

答案 0 :(得分:0)

试试这个

  public bool checkItemExist(string itemToCheck)
    {
         return lbxUnsortedList.Items.Cast<string>.Where(a=>a.ToLower().Equals(tbxAddWord.Text.ToLower()).Count > 0;
    }

答案 1 :(得分:0)

我只是建议你这个条件,它不是最佳的,但它按照你想要的方式工作:

        bool contains = false;

        for (int i = 0; i < lbxUnsortedList.Items.Count; i++)
        {
            if (lbxUnsortedList.Items[i].ToString().ToLower() == this.tbxAddWord.Text.ToString().ToLower())
            {
                contains = true;
            }

        }

        if (!contains)
        {
            //your code
        }
        else
        {
            MessageBox.Show("The word that you have added is already on the list");
            tbxAddWord.Text = "";
            tbxAddWord.Focus();

        }

答案 2 :(得分:0)

link应该可以满足您的需求。帖子的某些部分说

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase)

另外,您可以尝试以小写字母存储单词

this.lbxUnsortedList.Items.Add(this.tbxAddWord.Text.ToLower());

然后以相同的方式搜索字符串

this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text.ToLower()) == true

但是如果您使用'lbxUnsortedList'进行显示,那么使用带有键作为普通单词和小写值的字典也可能会有所帮助。

此外,如果您允许我扔其他内容,请使用string.IsNullOrEmpty(tbxAddWord.Text)代替tbxAddWord.Text == ""。您也可以使用tbxAddWord.Text = string.Empty;

答案 3 :(得分:0)

在比较两个字符串值之前,必须将字符串转换为大写或小写。

循环显示列表框lbxUnsortedList以从列表中获取项目。并将每个字符串与TextBox中的输入字符串tbxAddWord进行比较。

for (int i = 0; i < lbxUnsortedList.Items.Count; i++)
{
    if (lbxUnsortedList.Items[i].ToString().ToLower() == this.tbxAddWord.Text.ToString().ToLower())
    {
         //Your Code
    }
}

答案 4 :(得分:0)

对我来说是这样的

var query = _repository.Get(e => e.IsDeleteUser != true, null, "Role");

        if (!string.IsNullOrEmpty(filter.UserName))
        {
            query = query.Where(e => e.UserName.**ToLower()**.Contains(filter.UserName**.ToLower()**)).ToList();
        }