从ListView项目中删除突出显示....取消选择

时间:2017-09-29 11:36:04

标签: c# listview

基本上我正在写一个简单的电话目录。此应用程序具有列表视图窗口,搜索(文本)窗口和要搜索的按钮。一旦用户在搜索窗口中输入名称并点击搜索按钮,程序就会选择并突出显示与搜索条件对应的所有用户。 没问题......

如果用户在列表视图窗口中选择另一个项目,则会开发一个独特的场景。找到的先前项目仍然会突出显示...

如果用户在搜索后立即选择其他项目,如何取消选择/删除找到项目的突出显示?

以下是搜索按钮附带的代码:

提前致谢

 private void button3_Click(object sender, EventArgs e){
        string s = "    Search Via Forename";
        int result = 0;
        int count = 0;
        result = string.Compare(textBox1.Text, s);

        switch ((result == 0) || (String.IsNullOrEmpty(textBox1.Text))){
            case true: MessageBox.Show("Please input forename...");
                       break;
              default: foreach (ListViewItem item in listView1.Items){
                          if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower())){
                             item.Selected = true;
                             item.BackColor = Color.CornflowerBlue;
                             item.ForeColor = Color.White;
                             count++;
                          }else{
                             item.Selected = false;
                             item.BackColor = Color.White;
                             item.ForeColor = Color.Black;
                          }
                       }
                       if (listView1.SelectedItems.Count == 1){
                           listView1.Focus();
                       }
                       textBox1.Text = "    Search Via Forename";
                       textBox1.ForeColor = Color.Silver;
                       break;
        }
    }

2 个答案:

答案 0 :(得分:0)

在突出显示代码之前,循环浏览所有项目并将其 item.Selected 设置为false。

{
   "bool":{
      "minimum_should_match": 1,
      "should":[
         {
            "wildcard":{
               "ean":"*180g*"
            }
         },
         {
            "wildcard":{
               "titel":"*180g*"
            }
         },
         {
            "wildcard":{
               "interpret":"*180g*"
            }
         }
      ],
      "filter":[
         {
            "term":{
               "genre":{
                  "value":"Rock",
                  "boost":1
               }
            }
         }
      ]
   }
}

答案 1 :(得分:0)

首先删除代码的选择部分。事实上,我只是一起清除选择。您所做的颜色变化有效地为您突出显示,因此根据您提供的信息,我认为没有必要选择它们。

private void button3_Click(object sender, EventArgs e){
    string s = "    Search Via Forename";
    int result = 0;
    int count = 0;
    result = string.Compare(textBox1.Text, s);

    switch ((result == 0) || (String.IsNullOrEmpty(textBox1.Text))){
        case true: MessageBox.Show("Please input forename...");
                   break;
          default: foreach (ListViewItem item in listView1.Items){
                         item.Selected = false;
                      if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower())){                             
                         item.BackColor = Color.CornflowerBlue;
                         item.ForeColor = Color.White;
                         count++;
                      }else{
                         item.BackColor = Color.White;
                         item.ForeColor = Color.Black;
                      }
                   }
                   if (listView1.SelectedItems.Count == 1){
                       listView1.Focus();
                   }
                   textBox1.Text = "    Search Via Forename";
                   textBox1.ForeColor = Color.Silver;
                   break;
    }
}

接下来,我将使用选择更改事件来检测何时进行选择并清除我所做的所有格式。

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (ListViewItem item in listView1.Items)
        {
            item.BackColor = Color.White;
            item.ForeColor = Color.Black;
        }
    }

你没有指定胜利形式或WPF,所以我假设了胜利形式,并以此方式做出了一个例子。如果您使用WPF我相信您需要订阅的事件是列表视图控件的OnSelectionChanged事件。

在查看代码之后,我意识到你使用switch语句来处理一个不正确的布尔运算。我已经添加了如何更改下面的检查。

private void button3_Click(object sender, EventArgs e)
    {
        string s = "    Search Via Forename";
        int result = 0;
        int count = 0;
        result = string.Compare(textBox1.Text, s);

        // Do the check on the input
        if ((result == 0) || (string.IsNullOrEmpty(textBox1.Text)))
        {
            MessageBox.Show("Please input forename...");
            // after notifying the user just return
            return;
        }
        foreach (ListViewItem item in listView1.Items)
        {
            item.Selected = false;
            if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower()))
            {
                item.BackColor = Color.CornflowerBlue;
                item.ForeColor = Color.White;
                count++;
            }
            else
            {
                item.BackColor = Color.White;
                item.ForeColor = Color.Black;
            }
        }
        if (listView1.SelectedItems.Count == 1)
        {
            listView1.Focus();
        }
    }