2011-10-27 28 views
15

Tengo un cuadro combinado de kriptón al que enlazo datos con una lista de pares clave-valor. Lo que sucede es que cuando configuro el elemento seleccionado en código, se resalta el texto. ¿Cómo puedo prevenir esto o anular la selección del texto?Cómo anular la selección del texto de un cuadro combinado

He intentado lo siguiente:

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

nada parece funcionar. Cualquier ayuda es apreciada.

Respuesta

2

Trate de hacer esto

combo.SelectedText = String.Empty; 

respecto a su problema con el enfoque: (MSDN)

Cuando el cuadro combinado pierde el foco, el punto de selección se mueve a la principio del texto y cualquiera seleccionado el texto se deselecciona

So strange; por eso la siguiente no funcionó:

anotherControl.Focus(); 
+1

Gracias, pero no funcionó – MattBH

+0

que es raro cuando hago clic en él después de su carga y luego haga clic en otra cosa entonces que lo enfoque funciona! ??! me está volviendo loco – MattBH

+0

¿tu combobox está vinculado a alguna fuente de datos? En caso afirmativo, intente SelectedIndex = -1 – sll

0

No está seguro de lo que podría estar haciendo en el fondo, es decir dispararon eventos, etc. Sin embargo, en caso SelectedIndexChanged combox puede agregar anotherControl.Select().

Eso debería :)

+0

No, no funcionó. – MattBH

0

Sé que ha pasado un tiempo desde que esta pregunta. Pero esto es lo que puede hacer

combo.selectedindex = -1; 
+2

Gracias, pero no estoy tratando de cambiar el elemento seleccionado, solo quiero resaltar el texto. – MattBH

3

que puede haber encontrado una solución que funciona:

Si está utilizando un formulario, se suscribe a la forma que se muestra evento.

O

Si está utilizando un control de usuario (como yo), puede suscribirse al evento VisibleChanged.

En el evento, a continuación, puede hacer lo siguiente:

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

Como acotación al margen:

llegó a tener que hacer esto para un control de usuario en la que añadí ComboBoxes al control y luego necesitaba establecer su tamaño dinámicamente más tarde. Establecer el tamaño causó el resaltado que el OP estaba encontrando.

+0

Esto funcionó para mí también. Great –

0

Aquí es lo que hago:

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

'this.ActiveControl = null;' también funciona. – Alden

0

no especificó si el usuario se supone que es capaz de editar los valores de ComboBox o no. Si no es así, entonces DropDownStyle del ComboBox debe establecerse en ComboBoxStyle.DropDownList. De esta forma, el ComboBox solo permitirá seleccionar valores existentes, los usuarios no podrán ingresar nuevos valores y el texto nunca se resaltará.

6

he conseguido lograr esto ser de primer orden el evento OnPaint de mi control/ventana y haciendo

combobox1.SelectionLength = 0; 
+0

Haciendo esto y no puedo resaltar el texto más tarde. Cada vez se anula la selección porque se llama al método OnPaint a menudo –

0

estas 3 líneas me ayudaron:

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

ÍndiceDeTabulación tiene que ser no el primero, por lo que no es el primer elemento en el formulario

+1

Tengo el mismo problema que el OP y esto no me ayudó –

0

Simplemente tiene que colocar este código en el evento generado o hacer clic en el botón donde desea deseleccionar el texto de un cuadro combinado

ComboBox1.SelectedItem = null; 
+0

¡sí! bueno, gracias @shivam –

-1

No me importa la edad que tenga. Estamos construyendo una base de conocimiento.

Uso D5 (y probablemente las versiones anteriores son las mismas). Es necesario utilizar:

Combobox.SelLength := 0; 

Además, si eso no funciona, éste lo hace: Evitar el estilo por defecto (csDropDown). y ponerlo a:

Combobox.Style := csDropDownList; 

como se sugiere Alex.

Gracias. ¡Funciona genial!

+1

Perdónenme pero la sintaxis que han mostrado aquí no se ve como C# en absoluto. – kayess

+0

D5? ¿Te refieres a Delphi? En una pregunta etiquetada [C#]? – jean

0

En mi caso, la selección apareció después del cambio de tamaño. Esto resolvió que:

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

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

En caso SelectedIndexChanged añadir el temporizador que se ejecuta sólo una vez después de 10 milisegundos.

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