Hoe de tekst van een combobox te deselecteren

Ik heb een krypton keuzelijst met invoervak ​​die ik bind met een lijst met sleutel/waarde-paren. Wat er gebeurt, is dat wanneer ik het geselecteerde item in code zet, het de tekst markeert. Hoe kan ik dit voorkomen of de tekst deselecteren?

Ik heb het volgende geprobeerd:

// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4 
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;

Niets lijkt te werken. Alle hulp wordt gewaardeerd.

16

12 antwoord

Het lukte me om dit te bereiken door de OnPaint-gebeurtenis van mijn controle/venster op te heffen en te doen

combobox1.SelectionLength = 0;
6
toegevoegd
Dit doen en ik kan de tekst later niet benadrukken. Het wordt steeds gedeselecteerd omdat de OnPaint-methode vaak wordt aangeroepen
toegevoegd de auteur Martin Fernau, de bron

Ik heb misschien een oplossing gevonden die werkt:

Als u een formulier gebruikt, kunt u zich abonneren op de getoonde gebeurtenis van het formulier.

OR

Als u een UserControl gebruikt (zoals ik ben), kunt u zich abonneren op de gebeurtenis VisibleChanged.

In dat geval kunt u het volgende doen:

        foreach (ComboBox cbo in (this.Controls.Cast().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
        {
            cbo.SelectionLength = 0;
        }

Even terzijde:

Uiteindelijk moest ik dit doen voor een gebruikersbesturingselement waarin ik ComboBoxes aan het besturingselement heb toegevoegd en vervolgens later dynamisch hun grootte moest instellen. Het instellen van de grootte veroorzaakte de markering die het OP te zien kreeg.

3
toegevoegd
Dit werkte ook voor mij. Super goed
toegevoegd de auteur Martin Fernau, de bron

Probeer dit eens

combo.SelectedText = String.Empty;

Wat betreft uw probleem met focus: ( MSDN )

Wanneer de keuzelijst de focus verliest, wordt het selectiepunt verplaatst naar de   het begin van de tekst en de geselecteerde tekst wordt niet geselecteerd

Zo vreemd; waarom het volgende niet werkte:

anotherControl.Focus(); 
2
toegevoegd
Werk niet. Misschien is dit antwoord actueel voor oude C #.
toegevoegd de auteur Gurebu Bokofu, de bron
Bedankt, maar werkte niet
toegevoegd de auteur MattBH, de bron
het is raar als ik erop klik nadat het is geladen en klik dan op iets anders dan dat focuswerk werkt! ??! het maakt me gek
toegevoegd de auteur MattBH, de bron
het is gebonden, maar ik kies dan een item uit de lijst. Het is eigenlijk een formulier dat wordt voorgeselecteerd vanaf een db, dus ik moet het juiste item selecteren.
toegevoegd de auteur MattBH, de bron
is uw combobox gebonden aan een bepaalde gegevensbron? Zo ja, probeer SelectedIndex = -1
toegevoegd de auteur sll, de bron

Het kan me niet schelen hoe oud dit is. We bouwen een kennisbasis op.

Ik gebruik D5 (en waarschijnlijk zijn eerdere versies hetzelfde). Je moet gebruiken:

Combobox.SelLength :=  0; 

Ook als dat niet werkt, doet deze het volgende: Vermijd de standaardstijl (csDropDown).   En stel het in op:

Combobox.Style := csDropDownList; 

zoals Alex suggereerde.

Dank je. Werkt goed!

1
toegevoegd
D5? Bedoel je Delphi? In een [C #] gecodeerde vraag?
toegevoegd de auteur jean, de bron
Neem me niet kwalijk, maar de syntaxis die je hier hebt weergegeven, lijkt helemaal niet op C #.
toegevoegd de auteur kayess, de bron

Dit is wat ik doe:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
0
toegevoegd
this.ActiveControl = null; werkt ook.
toegevoegd de auteur Alden, de bron

Voeg bij evenement SelectedIndexChanged de timer toe die slechts eenmaal na 10 milliseconden wordt uitgevoerd.

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
0
toegevoegd

Ik weet dat het al een tijdje geleden is dat je deze vraag stelde. Maar hier is wat je kunt doen

combo.selectedindex = -1;
0
toegevoegd
Bedankt, maar ik probeer het geselecteerde item niet te wijzigen, ik wil alleen de tekst markeren.
toegevoegd de auteur MattBH, de bron

U hebt niet opgegeven of de gebruiker de ComboBox-waarden moet kunnen bewerken of niet. Als dat niet het geval is, moet DropDownStyle van de ComboBox worden ingesteld op ComboBoxStyle.DropDownList . Op deze manier staat de ComboBox alleen het selecteren van bestaande waarden toe, kunnen gebruikers geen nieuwe waarden invoeren en wordt de tekst nooit gemarkeerd.

0
toegevoegd

deze 3 lijnen hebben me geholpen:

cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;

TabIndex moet niet de eerste zijn, zodat het niet het eerste item in het formulier is

0
toegevoegd
Ik heb hetzelfde probleem als het OP en dit heeft niet geholpen
toegevoegd de auteur Martin Fernau, de bron

Niet zeker wat u op de achtergrond doet, bijvoorbeeld afgevuurde gebeurtenissen, enzovoort. In de combox selectedindexchanged -gebeurtenis kunt u nog eenControl.Select() toevoegen.

Dat zou:)

0
toegevoegd
Nee werkte niet.
toegevoegd de auteur MattBH, de bron

U hoeft deze code alleen maar op de gegenereerde gebeurtenis te plaatsen of op de knop te klikken waar u de tekst van een keuzelijst met invoervak ​​wilt opheffen

ComboBox1.SelectedItem = null;
0
toegevoegd
Ja! goed, bedankt @shivam
toegevoegd de auteur Murtuza Khan, de bron

In mijn geval verscheen selectie na het wijzigen van de grootte. Dit loste het op:

textBox.Resize += (sender, args) =>
{
    Control c = sender as Control;
    if (c == null || c.Parent == null)
        return;

    c.Focus();
    c.Parent.Focus();
};
0
toegevoegd