none
问Winform,TextBox中实现类似VS写代码时的智能提示大概怎么做呢...? RRS feed

答案

全部回复

  • 你好!
         我认为可以使用一个ComboBox来模拟这个效果,在下拉列表中显示相关的提示就可以了!
         你试试看!
    周雪峰
    2010年3月3日 11:48
    版主
  • 你好!

    要求简单按周版主的方式就行了。

    如果这个不能满足要求可以利用 BindingSource 控件的 filter 属性进行过滤。如:

    绑定一下列表控件,在 TextChanged 事件中显示这个列表控件,并根据 Text 内容设置 BindingSource 的 filter 属性实现过滤。TextBox 中按加车将列表控件选中的项填到 TextBox 中。


    知识改变命运,奋斗成就人生!
    2010年3月4日 1:54
    版主
  • FYI.

    http://www.codeproject.com/KB/cs/AutoCompleteTextBox.aspx
    2010年3月4日 2:45
  • 1.用txt做数据源连接字符串

    //text作为数据源的链接字符串
                string strConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test;
    Extended Properties=""text;HDR=Yes;FMT=Delimited"";";

    注意:c:\\test是个文件夹,里面有相应的txt文档做数据源。

    2.winfrom textbox输入智能提示

    核心代码:

    //下面3行用设置智能提示
                this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
                this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
                this.textBox1.AutoCompleteCustomSource = ac;//设置数据源

    其中     AutoCompleteStringCollection ac = new AutoCompleteStringCollection();

    全部代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;

    namespace TestAsSource
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            AutoCompleteStringCollection ac = new AutoCompleteStringCollection();

            private void Form1_Load(object sender, EventArgs e)
            {
                //下面3行用设置智能提示
                this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
                this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
                this.textBox1.AutoCompleteCustomSource = ac;//设置数据源

                //text作为数据源的链接字符串
                string strConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test;
    Extended Properties=""text;HDR=Yes;FMT=Delimited"";";

                using (OleDbConnection objConnection = new OleDbConnection(strConnection))
                {
                    objConnection.Open();

                    //b.txt是c:\\test下面的一个文件,如果是a.txt ,只要把下面3处b.txt 换成a.txt就可以了
                    OleDbDataAdapter myCommandd = new OleDbDataAdapter("select * from b.txt", objConnection);
                    DataSet ds = new DataSet();
                    myCommandd.Fill(ds, "b_txt");
                    DataTable dt = ds.Tables["b_txt"];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        ac.Add(dt.Rows[i][0].ToString());
                    }

                    objConnection.Close();
                }
               
            }
        }
    }


    咯咯
    • 已标记为答案 lht621921 2010年3月4日 6:41
    • 取消答案标记 lht621921 2010年3月4日 6:43
    2010年3月4日 3:14
  • ComboBox 的AutoCompleteMode 只能匹配输入的第一个关键字,我想实现输入多个关键字也能实现模糊匹配,例如我输入的是"abc  123"能从下拉框中检索所有包含"abc  123"的字符串
    2010年3月4日 6:19
  • 谢谢,我用textbox和listview实现了

    2010年3月4日 6:38
  • 谢谢,我用textbox和listview实现了

    • 已标记为答案 lht621921 2010年3月4日 6:43
    2010年3月4日 6:38
  • Thanks a lot ,我用textbox和listview实现了

    2010年3月4日 6:39