2010-01-28 21 views
5

Tengo un problema donde un control ComboBox cambiará su valor de texto cuando se cambia el tamaño. Aquí hay un código de ejemplo que trabajé hasta:Odd ComboBox comportamiento al cambiar el tamaño


Option Explicit On 
Option Strict On 

Public Class FMain 
    Private Sub FMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     uxComboBox.DropDownStyle = ComboBoxStyle.DropDown 
     uxComboBox.AutoCompleteSource = AutoCompleteSource.ListItems 
     uxComboBox.AutoCompleteMode = AutoCompleteMode.Suggest 

     ComboTest() 
    End Sub 

    Private Sub ComboTest() 
     Dim value As String = "6" 

     uxComboBox.Text = String.Empty 
     uxComboBox.Items.Clear() 

     uxComboBox.Items.AddRange(New String() {"4 9/16", "6 9/16", "7 9/16", "8 9/16"}) 

     Dim index As Integer = uxComboBox.FindStringExact(value) 
     If uxComboBox.SelectedIndex index Then 
      uxComboBox.SelectedIndex = index 
     End If 

     If uxComboBox.SelectedIndex = -1 AndAlso _ 
      Not String.Equals(uxComboBox.Text, value, StringComparison.OrdinalIgnoreCase) Then 
      uxComboBox.Text = value 
     End If 

     ' unselect the text in the combobox 
     ' 
     uxComboBox.Select(0, 0) 
    End Sub 
End Class 

Tenga en cuenta que este formulario (FMain) tiene un único cuadro combinado en él (uxComboBox) que se acopla a la parte superior. Cuando ejecuto el código, veo que el combobox tiene un valor de "6", que es lo que esperaría. Cuando cambio el tamaño del formulario, el cuadro combinado obtiene un valor de "6 9/16", que es lo que yo esperaría NO.

¿Alguien sabe por qué sucede esto? ¿Alguna solución alternativa sugerida?

Gracias!

Stephen

Respuesta

5

Sí, este es un error conocido en la implementación nativa de Windows de ComboBox. Hay otro aspecto de este error. Pon un botón en tu formulario y dale TabIndex = 0, cambia el TabIndex del CB a 1. Ejecútalo, el botón tendrá el foco. Cambiar el tamaño Tenga en cuenta que el texto de ComboBox cambia como antes, pero ahora también se resalta, como si tuviera el foco. Aunque no lo ha hecho.

Creo que este error ha existido desde Vista, no se corrigió en Win7. No hay solución conocida para eso.

+0

Gracias por la información. Acabamos de terminar de migrar de VB6 a .NET y este problema no ocurre en la aplicación VB6. ¿Alguna idea de por qué? – StephenM

+0

Es probablemente un error de tematización. La mayoría de estos errores de interfaz de usuario son. VB6 no habilita estilos visuales. Y usa muchos controles sin ventanas. –

+0

Bueno saber. ¡Gracias! – StephenM

0

Cuando se carga el formulario, ComboTest es ejecutado, y ves un '6', sin embargo, al cambiar su tamaño no muestra los nuevos datos, parece que usted necesita para actualizar el cuadro combinado, independientemente de el cambio de tamaño o no.

Pruebe uxComboBox.Refresh() inmediatamente después de la línea uxComboBox.Items.AddRange.

Y después de la línea 'ComboTest', establezca el índice seleccionado en 0 uxComboBox.Index = 0 también.

Espero que esto ayude, Saludos cordiales, Tom.

+0

Configurar el índice seleccionado a 0 solo selecciona el primer elemento de la lista que no es lo que quiero. Necesita retener el valor de "6" que configuré. He intentado uxComboBox.Refresh() como sugirió, pero no tuve suerte. El comportamiento es el mismo cuando cambio el tamaño del formulario. Incluso lo probé en el evento Resize del formulario, pero, nuevamente, no hubo cambios en el comportamiento. – StephenM

+0

@StephenM: ¿Puedes mostrar el código de diseñador del formulario? Me parece que debido a que el combo está acoplado a la parte superior y el cambio de tamaño, el cuadro combinado no se actualiza. Tal vez agregue un controlador de eventos para el cambio de tamaño del formulario y en el controlador de eventos llame a uxComboBox.Refresh – t0mm13b

+0

Ya lo intenté pero, una vez más, no tuve suerte. – StephenM

0

Estoy usando Windows 10 y Visual Studio 2017. Parece que este error aún persiste. Con la respuesta de Hans Passant anterior, trabajé alrededor del problema de esta manera.

Tenía un combo como control anclado a izquierda y derecha, por lo que se extendía cuando se expandía el formulario. Cuando la pantalla se expandió, el texto del cuadro combinado se resaltó como si tuviera el foco aunque no lo haya hecho.

Como solución alternativa, quité uno de los anclajes y lo agregué al cuadro de texto que estaba al lado. Ahora mi cuadro combinado no se expande con la pantalla, el cuadro de texto lo hace en su lugar. Sé que no es una solución para todos, pero puede ayudar a alguien en una situación similar a resolver el problema.

Cuestiones relacionadas