C# 如何在listbox中模糊查询

我的listbox数据是从文本文件里面读取出来的,我现在想输入一个字符,就显示对应的与字符符合的数据显示到listbox中,具体的模糊查询的代码怎么实现啊,急求啊,是从l... 我的listbox数据是从文本文件里面读取出来的,我现在想输入一个字符,就显示对应的与字符符合的数据显示到listbox中,具体的模糊查询的代码怎么实现啊,急求啊,是从listbox中查找后清空listbox然后显示到listbox还是直接从文本文件中对文本行进行模糊查询到后显示到listbox, 展开
 我来答
xiangjuan314
推荐于2018-05-17 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2906万
展开全部

C# listbox 的用法

  1.  属性列表:
        1.SelectionMode  
    组件中条目的选择类型:None-根本不允许任何选择;One-默认值,只选择单个选项;MultiSimple-简单的多项选择,单击一次鼠标就选中或取消选中列表中的一项;MultiExtended-扩展的多项选择,类似windows中的选择操作.
    SelectedItem   
    在单选的列表框里, SelectedItem返回的是一个对象,它的文本由Text属性表示.作用是获得列表框中被选择的条目.如果控件允许多项选择,被选中的条目就以SelectedItems属性表示,它是Item对象的一个集合.
        2.Count           
    列表框中条目的总数
        3.SelectedIndex /SelectedIndices/SelectedItem/SelectedItems
    ListBox.SelectedIndex属性获取单项选择ListBox中当前选定项的位置;ListBox.SelectedIndices属性获取一个集合,该集合包含ListBox中所有当前选定项的从零开始的索引;ListBox.SelectedItem属性获取ListBox中当前选定的项;ListBox.SelectedItems属性获取多重选择ListBox中所有选定的项,它是一集合。
    Public ReadOnly Property SelectedIndices As ListBox.SelectedIndexCollection
    ListBox.SelectedIndexCollection,包含控件中当前选定项的索引。如果当前没有选定的项,则返回空 ListBox.SelectedIndexCollection
    泛指列表框中的所有项


  2. 取列表框中被选中的值
         ListBox.SelectedValue


  3. 动态的添加列表框中的项:
         ListBox.Items.Add("所要添加的项");
    以下代码实现通过输入框向列表框中添加内容:
        Private Sub bttnAdd1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnAdd1.Click
            Dim ListItem As String
            ListItem = InputBox("Enter new item's name")
            If ListItem.Trim <> "" Then
                sourceList.Items.Add(ListItem)
            End If
        End Sub
         ListBox.Items.Insert(index,item)
         item是要添加到列表的对象,index是这个新项的索引。



  4.  移出指定项:
         //首先判断列表框中的项是否大于0
         If(ListBox.Items.Count > 0 )
         {
         //移出选择的项
          ListBox.Items.Remove(ListBox.SelectedItem);
         }
    以下代码实现从单项选择的列表框中删除被选中的条目:
        Private Sub bttnRemoveSelDest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnRemoveSelDest.Click
            ListBox.Items.Remove(ListBox.SelectedItem)
        End Sub
    以下代码实现从多项选择列表框中删除多个条目:
        Private Sub bttnRemoveSelSrc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnRemoveSelSrc.Click
            Dim i As Integer
            For i = 0 To ListBox.SelectedIndices.Count - 1
                LisBoxt.Items.RemoveAt(ListBox.SelectedIndices(0))
            Next
        End Sub
        备注:利用ListBox.Items.Remove方法,以要删除的对象作为参数,从列表中删除条目。而利用RemoveAt方法可以删除指定位置(索引)的列表项,它以索引作为参数:ListBox.Items.RemoveAt(index)


  5. 清空所有项:
         //首先判断列表框中的项是否大于0
         If(ListBox.Items.Count > 0 )
         {
         //清空所有项
         ListBox.Items.Clear();
         }



  6. 列表框可以一次选择多项:
         只需设置列表框的属性 SelectionMode="Multiple",按Ctrl可以多选


  7. 多列表框中搜索字符串
    FindString和 FindStringExact方法可以迅速地找到条目(search word)在列表里的位置(wordIndex)。它们都接收字符串作为弟一个参数,第二个参数可选,用于指定搜索开始的位置。其中FindString找到与指定字符部分匹配的条目,而FindStringExact找到时完全匹配的。
    wordIndex=ListBox.FindStringExact("search word")
    wordIndex=ListBox.FindString("search word")


  8. Contains方法
    利用它可以避免在列表中插入相同的对象。此方法接收一个对象作为参数,返回Ture/False来表示Items集合中是否包含这个对象。比如,要实现以下功能:先检查插入的字符串是否已经存在于列表,只有当列表中还没有包含这个字符串时才插入它。其代码如下(VB.Net):
    Dim itm As String="Remote Computing"
    If Not ListBox.Items.Contains(itm) then
               ListBox1.Item.Add(itm)
    End If


  9. 两个列表框联动,即两级联动菜单
         //判断第一个列表框中被选中的值
         switch(ListBox1.SelectValue)
         {
    //如果是"A",第二个列表框中就添加这些:
    case "A"
          ListBox2.Items.Clear();
          ListBox2.Items.Add("A1");
          ListBox2.Items.Add("A2");
          ListBox2.Items.Add("A3");
    //如果是"B",第二个列表框中就添加这些:
    case "B"
          ListBox2.Items.Clear();
          ListBox2.Items.Add("B1");
          ListBox2.Items.Add("B2");
          ListBox2.Items.Add("B3");
         }


  10.  实现列表框中项的移位
         即:向上移位、向下移位
         具体的思路为:创建一个ListBox对象,并把要移位的项先暂放在这个对象中。
         如果是向上移位,就是把当前选定项的的上一项的值赋给当前选定的项,然后
         把刚才新加入的对象的值,再附给当前选定项的前一项。
         具体代码为:
          //定义一个变量,作移位用
          index = -1;
          //将当前条目的文本以及值都保存到一个临时变量里面
          ListItem lt=new ListItem (ListBox.SelectedItem.Text,ListBox.SelectedValue);
          //被选中的项的值等于上一条或下一条的值
         ListBox.Items[ListBox.SelectedIndex].Text=ListBox.Items[ListBox.SelectedIndex + index].Text;
          //被选中的项的值等于上一条或下一条的值
         ListBox.Items[ListBox.SelectedIndex].Value=ListBox.Items[ListBox.SelectedIndex + index].Value;
          //把被选中项的前一条或下一条的值用临时变量中的取代
          ListBox.Items[ListBox.SelectedIndex].Test=lt.Test;
          //把被选中项的前一条或下一条的值用临时变量中的取代
          ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;
          //把鼠标指针放到移动后的那项上
          ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;


  11. 移动指针到指定位置:
          (1).移至首条
              //将被选中项的索引设置为0就OK了
              ListBox.SelectIndex=0;
          (2).移至尾条
              //将被选中项的索引设置为ListBox.Items.Count-1就OK了
              ListBox.SelectIndex=ListBox.Items.Count-1;
          (3).上一条
              //用当前被选中的索引去减 1
              ListBox.SelectIndex=ListBox.SelectIndex - 1;
          (4).下一条
              //用当前被选中的索引去加 1
              ListBox.SelectIndex=ListBox.SelectIndex + 1;


阳光的雷咩咩
推荐于2017-12-16 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7836万
展开全部

读到内存里,是一个列表,这个总集合始终不变。筛选就是先清空全部,然后再添加符合的。筛选始终是在内存里筛选,频繁IO不仅性能不好对磁盘还会有损害。筛选的大致代码就是

    public partial class Form1 : Form
    {
        List<string> lst = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void ReadFile()
        {
            this.lst = new List<string>();
            //自己处理读文件到list的转换
        }

        private void Display(string filter)
        {
            this.listBox1.Items.Clear();
            this.listBox1.Items.Add(this.lst
                .Where(x => x.Contains(filter)));
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.ReadFile();
            this.Display("");
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string filter = this.textBox1.Text.Trim();
            this.Display(filter);
        }
    }
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弥榆寒F
2015-01-12 · 超过26用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:40.5万
展开全部
需要增加一个在默认情况下隐藏的ListBox在TextBox的下面。\r\n首先设置 textbox的TextChanged事件\r\n只要textbox的文本值发生了改变,就会触发该事件\r\n位于textbox下方隐藏的ListBox显示,并加载查找到的数据,\r\n在设置一下ListBox控件的ItemClick事件\r\n单击Item时,就将该项的值加载到TextBox上\r\n\r\n\\/\\/************************************************************\r\n重写TextBox可以实现更好的效果,使用起来也会更加方便(不需要每个需要模糊查询的地方都拖一个ListBox并实现一堆逻辑),但是其实现代价比较大,有一定难度,如果有兴趣可以尝试。
追问
就是实现模糊查询的代码啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adai_008
2015-01-12 · TA获得超过1385个赞
知道大有可为答主
回答量:1152
采纳率:83%
帮助的人:796万
展开全部
为什么不用TextBox或ComboBox呢?这二者都有AutoCompleteMode属性,可以轻松实现你的想法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
玩转数据处理
2015-01-12 · 数据处理,Python,dotnet
玩转数据处理
采纳数:1613 获赞数:3794

向TA提问 私信TA
展开全部
给我你的项目看看 1720406057
更多追问追答
追问
其实我想做的就跟vs的智能提示差不多  不过我的简简单单而已  只要实现一个对数据列表的模糊查询就行了
追答
我是想在你的项目基础之上改而已,我自己按我的思路写出来的你自己又比一定看得懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式