【解決方法】オートコンプリート コンボボックスは、VB.NET で始まる文字列だけでなく、文字列の任意の部分と一致します。


オートコンプリート コンボボックスは文字列の先頭だけでなく任意の部分と一致します

コンボボックスに項目がある場合
ABC 123
234
123 ABC
123

1 つが 23 を検索すると、すべてがポップアップします。1 つが 12 を検索すると、3 つの結果がコンボボックスにポップアップ表示されます。

とても緊急なので助けてください

私が試したこと:

Googleの多くのコードを試しましたが、結果が得られませんでした

コンボボックスの提案と追加がすべて Visual Studio で機能しない

解決策 1

ゆるキャラ検索に基づいた候補を含むコンボボックス[^]

上記のリンクに従って、優れたロジックと優れた解決策を備えた人物を紹介します…

解決策 2

解決しました:)

必要がある:

1. 通常のコンボボックスを用意します (DropDownStyle = ドロップダウン、AutoCompleteMode = なし、AutoCompleteSource = なし)、それを comboBox1 と呼びましょう
2. イベントを追加する 選択されたインデックスが変更されました、 と テキスト更新

次に、次のコードを使用します。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace CB_Contains
{
    public partial class Form1 : Form
    {
        private Dictionary<String, System.Int32> CBFullList;
        private Dictionary<String, System.Int32> CBFilteredList;

        bool ComboBoxBusy;

        public Form1()
        {
            InitializeComponent();

            ComboBoxBusy = false;
            CBFullList = new Dictionary<string, Int32>();
            CBFilteredList = new Dictionary<string, Int32>();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CBFullList.Add("None", 0);
            CBFullList.Add("abc 123", 1);
            CBFullList.Add("pqr 234", 2);
            CBFullList.Add("123 abc", 3);
            CBFullList.Add("pqr 123", 4);

            FilterList(false);
        }

        private void FilterList(bool show)
        {
            if (ComboBoxBusy == false)
            {
                String orgText;

                ComboBoxBusy = true;
                orgText = comboBox1.Text;

                comboBox1.DroppedDown = false;

                CBFilteredList.Clear();

                foreach (KeyValuePair<string, Int32> item in CBFullList)
                {
                    if (item.Key.ToUpper().Contains(orgText.ToUpper()))
                        CBFilteredList.Add(item.Key, item.Value);
                }

                if (CBFilteredList.Count < 1)
                    CBFilteredList.Add("None", 0);

                comboBox1.BeginUpdate();
                comboBox1.DataSource = new BindingSource(CBFilteredList, null);
                comboBox1.DisplayMember = "Key";
                comboBox1.ValueMember = "Value";

                comboBox1.DroppedDown = show;
                comboBox1.SelectedIndex = -1;
                comboBox1.Text = orgText;
                comboBox1.Select(comboBox1.Text.Length, 0);
                comboBox1.EndUpdate();
                Cursor.Current = Cursors.Default;

                ComboBoxBusy = false;
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ComboBoxBusy == false)
            {
                FilterList(false);
            }
        }

        private void comboBox1_TextUpdate(object sender, EventArgs e)
        {
            FilterList(true);
        }
    }
 }

コメント

タイトルとURLをコピーしました