2011-10-27 1 views
15

Ho una casella combinata di krypton che I dati legano con un elenco di coppie chiave-valore. Quello che succede è che quando imposto l'elemento selezionato nel codice, si evidenzia il testo. Come posso evitare questo o deselezionare il testo?Come deselezionare il testo di una casella combinata

ho provato la seguente:

// 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; 

Niente sembra funzionare. Qualsiasi aiuto è apprezzato.

risposta

2

Prova questo

combo.SelectedText = String.Empty; 

Per quanto riguarda il problema con attenzione: (MSDN)

quando la casella combinata perde lo stato attivo, il punto di selezione si sposta al all'inizio del testo e qualsiasi selezionati il testo diventa deselezionato

Così strano; perché quanto segue non ha funzionato:

anotherControl.Focus(); 
+1

Grazie, ma non ha funzionato – MattBH

+0

è strano quando clicco su di esso dopo la sua carica e quindi fare clic su qualcos'altro allora che cosa concentrarsi funziona! ??! mi sta facendo impazzire – MattBH

+0

la tua casella combinata è legata a qualche fonte di dati? Se sì, prova SelectedIndex = -1 – sll

0

Non so cosa si potrebbe fare in background cioè eventi ecc sparato Tuttavia nel caso in SelectedIndexChanged combox è possibile aggiungere anotherControl.Select().

Questo dovrebbe :)

+0

No non ha funzionato. – MattBH

0

so suo stato un po 'che lei ha chiesto questa domanda. Ma ecco cosa si può fare

combo.selectedindex = -1; 
+2

Grazie, ma non sto cercando di cambiare l'elemento selezionato, voglio solo non evidenziare il testo. – MattBH

3

forse ho trovato una soluzione che funziona:

Se si utilizza un modulo, sottoscrive il modulo è mostrato evento.

O

Se si utilizza un UserControl (come me), è possibile iscriversi alla manifestazione VisibleChanged.

Nel caso, quindi è possibile effettuare le seguenti operazioni:

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

Per inciso:

ho finito per dover fare questo per un controllo utente in cui ho aggiunto ComboBoxes al controllo e poi necessario per impostare in modo dinamico le loro dimensioni. L'impostazione della dimensione ha causato l'evidenziazione che l'OP stava incontrando.

+0

Questo ha funzionato anche per me. Ottimo –

0

Ecco quello che faccio:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    this.ActiveControl = cancelButton; 
} 
+0

'this.ActiveControl = null;' funziona anche. – Alden

0

Non ha specificato se l'utente dovrebbe essere in grado di modificare i valori ComboBox o meno. In caso contrario, è necessario impostare DropDownStyle di ComboBox su ComboBoxStyle.DropDownList. In questo modo il ComboBox consentirà solo la selezione di valori esistenti, gli utenti non saranno in grado di digitare nuovi valori e il testo non sarà mai evidenziato.

6

sono riuscito realizzazione di questo essere rilevante l'evento OnPaint del mio controllo/finestra e facendo

combobox1.SelectionLength = 0; 
+0

Facendo questo e non posso evidenziare il testo più tardi. Viene sempre deselezionato perché il metodo OnPaint viene chiamato spesso –

0

queste 3 righe mi ha aiutato:

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

TabIndex deve essere non il primo, in modo da che non è il primo elemento nel modulo

+1

Ho lo stesso problema dell'OP e questo non ha aiutato –

0

È sufficiente posizionare questo codice sull'evento generato o sul clic del pulsante in cui si desidera deselezionare il testo di una casella combinata

ComboBox1.SelectedItem = null; 
+0

sì! bene, grazie @shivam –

-1

Non mi interessa quanti anni ha. Stiamo costruendo una base di conoscenze.

Io uso D5 (e probabilmente le versioni precedenti sono le stesse). È necessario utilizzare:

Combobox.SelLength := 0; 

Inoltre, se questo non funziona, questo si fa: Evitare lo stile predefinito (csDropDown). e impostarlo:

Combobox.Style := csDropDownList; 

come suggerito Alex.

Grazie. Funziona alla grande!

+1

Perdonami ma la sintassi che hai mostrato qui non sembra affatto C#. – kayess

+0

D5? Intendi Delphi? In una domanda con tag [C#]? – jean

0

Nel mio caso la selezione è apparso dopo il ridimensionamento. Questo risolto:

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

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

Su evento SelectedIndexChanged aggiungere il timer che sarà eseguito solo una volta dopo 10 millisecondi.

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