c # - Autofuldførelse i Windows-applikation

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg vælge værdi i tekstfelt tegn efter tegn som HDPOS Autofuldførelse tekstboks


jeg forsøgte
I sideindlæsning


private void loadproductName()
{
    DataTable dt = \_poshelper.getproductName("Bill\_Select\_ProductName");
    if (dt.Rows.Count != 0)
    {
        string[] postSource = dt
                .AsEnumerable()
                .Select<System.Data.DataRow, String>(x => x.Field<String>("UniqueName"))
                .ToArray();

        var source = new AutoCompleteStringCollection();
        source.AddRange(postSource);
        txtItemName.AutoCompleteCustomSource = source;
    }     
}


I forlængelse


private void txtItemName\_Leave(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtItemName.Text))
    {
        DataSet ds1 = \_poshelper.getproductNameExistWhileLeave(txtItemName.Text);
        if (ds1.Tables[0].Rows.Count == 0)
        {
            txtItemName.Text = "";
            txtItemName.Focus();
        }
        else
        {
            loadLeave(ds1);
            txtItemName.Focus();
        }
    }
}


jeg er nødt til


Hvis jeg sletter et tegn ved hjælp af backspace, slettes det permanent


a [8]


Jeg har brug for som 2 nd billede, hvis jeg sletter betyder, at jeg behøver at forblive i tekstboks


b [9]


Opdater


mere præcisering, fra kommentarer



  Strenge i tekstboksen, det bør ikke slettes, hvis jeg trykker tilbage på plads. I stedet skal det vælge hvert tegn. Hver gang jeg trykker på backspace


Bedste reference


Her foreslår jeg 'Ændringer for at gøre din tekstboks bære følgende adfærd.


Når du ikke ønsker 'vedhæftet forslag' tekst (som vist på første billede), der er væk, når du skriver backspace i tekstfelt,


du kan gøre det disse trin



  • Få nuværende tekstbokstekst (fjernet sidste tegn, da vi endelig er tilbage i afstand)

  • Ryd tekst s tekst

  • Send tekst taget tekst tilbage til tekstboks



Foretag følgende ændring af din kode


private void loadproductName()
{
  DataTable dt = \_poshelper.getproductName("Bill\_Select\_ProductName");
  if (dt.Rows.Count != 0)
  {
    string[] postSource = dt
            .AsEnumerable()
            .Select<System.Data.DataRow, String>(x => x.Field<String>("UniqueName"))
            .ToArray();

    var source = new AutoCompleteStringCollection();
    source.AddRange(postSource);
    txtItemName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
    txtItemName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
    txtItemName.AutoCompleteCustomSource = source;
  }
}


Jeg er ikke sikker på hvad du gør i Leave Event. Men du kan tilføje textBox 's KeyUp hændelse og tilføje kode som nedenfor i den hændelse.


private void txtItemName\_KeyUp(object sender, KeyEventArgs e)
{
    // track for backspace
    if (e.KeyCode == Keys.Back)
    {
        if (txtItemName.Text != "")
        {
            string text = txtItemName.Text.Substring(0, txtItemName.Text.Count() - 1);
            txtItemName.Text = "";
            txtItemName.Focus();
            SendKeys.Send(text);
        }
    }
}