Cómo mostrar autocompletar programáticamente sin ingresar un texto

C # TextBoxAutoCompleteCustomSource tiene unList<string>, AutoCompleteMode = Suggest.

Puedo ver la lista cuando escribo una letra.

¿Cómo mostrar la lista completa sin escribir una letra programáticamente? Esto debe hacerse mientras el usuario presiona la tecla de flecha hacia abajo en el cuadro de texto.

¿Hay alguna API de Win32 disponible?

Mi solución

Refiné una mejor solución.

Agrega unListBox Controla la forma y hazla comoVisible = false

int curSelIndex = -1;

El siguiente código será ejecutado.Form_Load Evento.

txtEmpId.AutoCompleteCustomSource.AddRange(EmpIds.ToArray());
lstAutoComplete.Items.Clear();
lstAutoComplete.Items.AddRange(EmpIds.ToArray());
txtEmpId.KeyDown += (ks, ke) =>
{
    if (!(ke.KeyCode == Keys.Down || 
          ke.KeyCode == Keys.Up || 
          ke.KeyCode == Keys.Enter)) 
    { 
        lstAutoComplete.Visible = false; 
        return; 
    }
    ke.Handled = true;
    if (ke.KeyCode == Keys.Enter)
    {
        if (lstAutoComplete.Visible)
        {
            var str = lstAutoComplete.SelectedItem + "";
            // Process the Selected Item and set to TextBox.
        }
    }
    if (!lstAutoComplete.Visible && txtEmpId.Focused)
    {
        var loc = txtEmpId.Location;
        loc.Y += txtEmpId.Height;
        lstAutoComplete.Location = loc;
        lstAutoComplete.Size = txtEmpId.Size;
        lstAutoComplete.Height = 100;
        lstAutoComplete.SelectedIndex = 0;
        curSelIndex = 0;
        lstAutoComplete.Visible = true;
    }
    else if(lstAutoComplete.Visible && txtEmpId.Focused)
    {
        if (ke.KeyCode == Keys.Down)
        {
            curSelIndex++;
            if (curSelIndex >= lstAutoComplete.Items.Count)
                curSelIndex = lstAutoComplete.Items.Count - 1;
            if (lstAutoComplete.Items.Count > 0)
                lstAutoComplete.SelectedIndex = curSelIndex;
        }
        else if (ke.KeyCode == Keys.Up)
        {
            curSelIndex--;
            if (curSelIndex < 0)
                curSelIndex = 0;
            if (lstAutoComplete.Items.Count > 0)
                lstAutoComplete.SelectedIndex = curSelIndex;
        }
    }
};
txtEmpId.Leave += (ls, le) => lstAutoComplete.Visible = false;

Respuestas a la pregunta(1)

Su respuesta a la pregunta