【问题标题】:C# AutoComplete FunctionC# 自动完成功能
【发布时间】:2016-09-13 03:09:02
【问题描述】:

我想创建一个自动完成功能,例如:如果我输入 AWP,它会显示所有 AWP 命令,如果我双击一个命令,它会将命令插入到 Richtextbox 中,另一个函数会将命令转换为 ID

唯一的问题是,如果我输入 Skin.AWP 然后 AWP 它不会像它应该显示的那样自动完成命令,如果我按 enter 并输入 AWP 也是如此

我的代码:

    public List<string> autoCompleteSkinsList = new List<string>();

    public ConfigMaker()
    {
        InitializeComponent();

        autoCompleteSkinsList.Add("AWP_ASIIMOV");
        autoCompleteSkinsList.Add("AWP_BOOM");
        autoCompleteSkinsList.Add("AWP_Dragon Lore");
        autoCompleteSkinsList.Add("AWP_Forest DDPAT");
        autoCompleteSkinsList.Add("AWP_Pink DDPAT");
        autoCompleteSkinsList.Add("AWP_Snake Camo");
        autoCompleteSkinsList.Add("AWP_Lightning Strike");
        autoCompleteSkinsList.Add("AWP_Safari Mesh");
        autoCompleteSkinsList.Add("AWP_Corticera");
        autoCompleteSkinsList.Add("AWP_Redline");
        autoCompleteSkinsList.Add("AWP_Man-o'-war");
        autoCompleteSkinsList.Add("AWP_Electric Hive");
        autoCompleteSkinsList.Add("AWP_Pit Viper");
        autoCompleteSkinsList.Add("AWP_Worm God");
        autoCompleteSkinsList.Add("AWP_Medusa");
        autoCompleteSkinsList.Add("AWP_Sun in Leo");
        autoCompleteSkinsList.Add("AWP_Hyper Beast");

    }

    public void TextBox_TextChanged(object sender, EventArgs e)
    {

        TextBox.Rtf = TextBox.Rtf.Replace("AWP_ASIIMOV", "279");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_BOOM", "174");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Dragon Lore", "344");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Forest DDPAT", "5");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Pink DDPAT", "84");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Snake Camo", "30");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Lightning Strike", "51");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Safari Mesh", "72");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Corticera", "181");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Redline", "259");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Man-o'-war", "395");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Electric Hive", "227");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Pit Viper", "251");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Worm God", "424");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Medusa", "446");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Sun in Leo", "451");
        TextBox.Rtf = TextBox.Rtf.Replace("AWP_Hyper Beast", "475");

        listBox2.Items.Clear();
        if (TextBox.Text.Length == 0)
        {
            return;
        }

        foreach (String SkinList in autoCompleteSkinsList)
        {
            if (SkinList.Contains(TextBox.Text))
            {
                listBox2.Items.Add(SkinList);
            }

        }
    }

    public void listBox2_DoubleClick(object sender, EventArgs e)
    {
        TextBox.Text = listBox2.Items[listBox2.SelectedIndex].ToString();
    }

示例图片: http://imgur.com/a/MRBuA

【问题讨论】:

  • 所以您希望根据在文本框中输入的内容来填充列表框?如:用户输入 AWP 并且列表框被 AWP 相关项填满?
  • 没错,如果用户然后双击列表框中的项目,它会将项目插入文本框
  • 嗯,简短的回答是您正在从列表中的文本框中查找字符串...因此,如果您键入“Skin.AWP”,它将不会在列表中找到它。如果你按回车,同样的事情。列表中的所有内容都以“AWP”开头,并且不包含任何带有“SKIN.AWP”的内容。您应该重写代码以在文本中找到“AWP”,然后在列表框中相应地显示选项

标签: c# winforms autocomplete


【解决方案1】:

根据我上面的评论,我会这样做:

        private void TextBox_TextChanged(object sender, EventArgs e)
    {
        listBox2.Items.Clear();
        if (TextBox.Text.Length == 0)
        {
            return;
        }

        if (TextBox.Text.Contains("AWP"))
        {
            listBox2.DataSource = autoCompleteSkinsList;
            listBox2.Refresh();
        }            
    }
    public void listBox2_DoubleClick(object sender, EventArgs e)
    {
        TextBox.Text = listBox2.Items[listBox2.SelectedIndex].ToString();
    }

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2021-06-24
    • 2011-07-07
    相关资源
    最近更新 更多