web-dev-qa-db-ja.com

WinForms ComboBox DropDownとAutocompleteウィンドウの両方が表示されます

私はこのコードでwinformsアプリにComboBoxを持っています:

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

DataTable t = new DataTable();
t.Columns.Add("ID", typeof(int));
t.Columns.Add("Display", typeof(string));

for (int i = 1; i < 2000; i++)
{
    t.Rows.Add(i, i.ToString("N0"));
}

comboBox1.DataSource = t;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Display";

ウィンドウが開いたら、次の手順に従います。

  1. ComboBoxドロップダウンボタンをクリックします-これにより、アイテムのリストが表示され、ComboBox内のテキストが選択されます
  2. 「5」、「1」と入力します。つまり、オートコンプリートを使用して515、516などを検索します。
  3. オートコンプリートウィンドウがドロップダウンリストの一番上に表示されます。ただし、マウスオーバーすると、クリックなどのマウスイベントを受信して​​いるのは、オートコンプリートウィンドウの後ろにある隠れたドロップダウンウィンドウです。だから私はオートコンプリートアイテムをクリックしていると思いますが、実際には完全にランダムに見えない何かをクリックしています。

これはComboBoxのバグですか?それが重要な場合、私はWindows 7を使用しています。 ComboBoxwrongをどうにかして設定していますか?

キーボードを使用すると、オートコンプリートのドロップダウンが使用されることにも注意してください。したがって、上下の矢印キーはフロントウィンドウを使用していますが、マウスはバックウィンドウを使用しています。

enter image description here

31
Clyde

PropertyGridからプロパティを設定するだけで問題なく再現できます。 Win7とWindows XPの両方でこのように動作します。

これは、この フィードバック記事 に記載されている壊れた動作です。示されているように、マイクロソフトは修正を検討していません。考えられる回避策の1つは、DropDownイベントハンドラーでオートコンプリートを無効にし、DropDownClosedイベントハンドラーで再度有効にすることです。

20
Hans Passant

ComboBoxKeyDownイベントにコードを1行追加すると、問題が解決します!

private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e)
{
    comboBox_NameAndID.DroppedDown = false;
}

ソース

23
Joe Gayetty

私はブラジル人のエンコーディングの学生で、自分のプロジェクトで修正しようとして何時間も費やしています。そして、ここでは数秒で見ました!!!

私のコードは次のようです:

private void populateCombos()
    {
        persist.ShowLst(dspMember, vlMember,varTable,lstBox,varWhere);
        persist.ShowLst(dspMember, vlMember,varTable,ddlist1,varWhere);
        persist.ShowLst(dspMember, vlMember,varTable, ddlist2,varWhere);

        ddList1.Text = null;
        ddList2.Text = null;

        lstBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        lstBox.AutoCompleteSource = AutoCompleteSource.ListItems;
        lstBox.Text = null;
    }
2
Wilton Alves

Keypressイベントに追加します。

    Dim box As ComboBox = sender
    box.DroppedDown = False
1
ComboBoxNerd

一度に1つだけを開くには、comboBox1.Droppeddown = trueを使用してレギュラーを開き、falseはオートコンプリートのみを表示します。

0
AC25

デザインビューからComboBoxを選択し、 "None"をAutoCompleteModeプロパティに設定します。

0
Saurav Das

WinForms ComboBox DropDown ...答えはこれです...
comboBox1 Enterイベントに以下のコードを記述します。

_private void comboBox1_Enter(object sender, EventArgs e)
{
    comboBox1.DroppedDown = true;
}
_

次に、comboBox1オートコンプリートの場合...
このAutoComplete()をページ読み込みイベントに書き込みます。

_public void AutoComplete()
{
    try
    {
        MySqlConnection conn = new 
        MySqlConnection("server=localhost;database=databasename;user
            id=root;password=;charset=utf8;");
        MySqlCommand cmd = new MySqlCommand("select distinct
            (columnName) from tablename", conn);
        DataSet ds = new DataSet();
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        da.Fill(ds, "tablename");
        AutoCompleteStringCollection col = new
        AutoCompleteStringCollection();

        int i = 0;
        for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
        {
            col.Add(ds.Tables[0].Rows[i]["columnName"].ToString());
        }
        comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
        comboBox1.AutoCompleteCustomSource = col;
        comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    }
}
_
0
Lalit

それはおかしいです。あなたのコードは私には問題なく見え、私はこのオートコンプリート機能を数回使用しましたが、ドロップダウンリストとオートコンプリートリストの両方が表示されませんでした。

私の提案は

  • Display/Valueメンバーの後にDataSourceを設定します。理由は思い出せませんが、他の人が問題を引き起こしています。

    comboBox1.ValueMember = "ID";
    comboBox1.DisplayMember = "Display";
    comboBox1.DataSource = t;
    
  • コードの最後にAutoCompleteSourceを設定します(DataSouceを追加した後)。

多分それは役立ちます。

0

デザインビューからComboBoxを選択し、「追加」をAutoCompleteModeプロパティに設定します。これにより、ウィンドウを表示せずにアイテムが提案されます。

0
Saurav Das

コレクションにアイテムを追加するだけです。

コンボボックスのプロパティオプションに移動して、AutoCompleteSource = ListItems AutocompleteMode = suggestを選択します。

注:オートコンプリートソースには、要件に応じて多くのオプションがあります。

0
vivek verma