繁体   English   中英

在 c# 中制作完美的自动完成文本框

[英]Making a perfect auto complete TextBox in c#

我创建了一个搜索文本框,并在“按名称”文本位于组合框中时启用了自动完成功能。 自动完成源是 my.mdf 数据库文件。 自动完成工作正常,但有一个问题。

当我点击自动完成建议时,建议中的文本会被选中并输入到文本框中,但同时也会输入几个“空格”

如何在文本中输入空格的图像

所以,下一次,当我点击文本框时,Ibeam 不会从文本的最后一个字母开始,我必须退格几次。

Ibeam 如何在我单击的位置闪烁而不是从 TEXT 的最后一个字母开始的图像

我认为我错过了一些自动完成属性。

这是我可以与自动完成相关的代码:

 private void vieworder_Load(object sender, EventArgs e)
    {
//I am including the load method because I think that problem may be caused because I didn't call the autocomp method here
        try
        {
            con.Open();
            if (con.State == ConnectionState.Open)
            {
                lblstatus.Text = "Connected";
                lblstatus.ForeColor = Color.Green;
            }
            else
            {
                lblstatus.Text = "Not-Connected";
                lblstatus.ForeColor = Color.Red;
            }

            showdtgrid();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }
public void showautocomp()
    {
//this is the method that starts the autocomplete

        cmd = new SqlCommand("SELECT cust_name FROM ordertbl ", con);
        SqlDataReader dr = cmd.ExecuteReader();
        AutoCompleteStringCollection autoComplete = new AutoCompleteStringCollection();
        while (dr.Read())
        {
            autoComplete.Add(dr.GetString(0));
        }
        txtsrchbyname.AutoCompleteMode = AutoCompleteMode.Suggest;
        txtsrchbyname.AutoCompleteSource = AutoCompleteSource.CustomSource;
        txtsrchbyname.AutoCompleteCustomSource = autoComplete;
        dr.Close();
    }




 private void btnrefresh_Click(object sender, EventArgs e)
        {
 //the refresh button refreshes the datagrid and auto complete
            showdtgrid();
            showautocomp();
        }

private void search()
        {
//this method selects from DB when button is clicked
            if (cmbsearchby.Text == "By name")
            {
                SqlCommand cmd1 = new SqlCommand("SELECT*FROM ordertbl WHERE cust_name LIKE '" + txtsrchbyname.Text + "%'", con);
                da = new SqlDataAdapter(cmd1);
                dtbl = new DataTable();
                da.Fill(dtbl);
                dtgridViewOrder.DataSource = dtbl;
            }
            else if (cmbsearchby.Text == "Containing")
            {
                SqlCommand cmd2 = new SqlCommand("SELECT*FROM ordertbl WHERE cust_name LIKE '%" + txtsrchbyname.Text + "%'", con);
                da = new SqlDataAdapter(cmd2);
                DataTable dtbl2 = new DataTable();
                da.Fill(dtbl2);
                dtgridViewOrder.DataSource = dtbl2;
            }

        }

 private void txtsrchbyname_Click(object sender, EventArgs e)
        {
//I also included show autocomp method in the text box so I dont have to refresh everytime
            if (cmbsearchby.Text == "By name")
            {
                showautocomp();
            }
            else
            {
                txtsrchbyname.AutoCompleteMode = AutoCompleteMode.None;
            }
        }

似乎问题来自cust_name的数据库类型。 一个快速的解决方法是修剪从数据库中获取的结果

autoComplete.Add(dr.GetString(0).Trim());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM