2011-05-19 20 views
6

Tengo un proyecto C# WinForms que es muy parecido a un asistente en su funcionalidad. Los pasos individuales viven en una clase llamada StepPanel, que hereda del control Panel, dentro del formulario y esos paneles están organizados en una matriz.¿Cuándo es Control.Visible = true resulta ser falso?

Lo que me he encontrado es que cuando se llama a UpdateUI() y recorre la matriz, se ajusta el texto de título del paso de asistentes para el paso actual, se asegura de que todos los pasos inactivos estén ocultos y garantiza que el paso activo es visible, en el lugar correcto y tiene el tamaño correcto.

Aquí está el código:

private void UpdateUI() 
    { 
     // If the StepIndex equals the array length, that's our cue 
     // to exit. 
     if (StepIndex == Steps.Length) 
     { 
      Application.Exit(); 
      return; 
     } 

     for (var xx = 0; xx < Steps.Length; xx++) 
     { 
      if (xx == StepIndex) 
      { 
       if (!String.IsNullOrEmpty(Steps[xx].Title)) 
       { 
        LabelStepTitle.ForeColor = SystemColors.ControlText; 
        LabelStepTitle.Text = Steps[xx].Title; 
       } 
       else 
       { 
        LabelStepTitle.ForeColor = Color.Red; 
        LabelStepTitle.Text = 
         Resources.UiWarning_StepTitleNotSet; 
       } 
      } 
      else 
      { 
       Steps[xx].Visible = false; 
      } 
     } 

     Steps[StepIndex].Top = 50; 
     Steps[StepIndex].Left = 168; 
     Steps[StepIndex].Width = 414; 
     Steps[StepIndex].Height = 281; 
     Steps[StepIndex].Visible = true; 

     SetNavigationButtonState(true); 
    } 

Cuando todo está dicho y hecho, Pasos [StepIndex] .Visible == false.

Todavía estoy perplejo por este comportamiento porque estaba trabajando hace menos de 30 minutos.

+0

¿Has cambiado algo en los últimos 30 minutos? – Beth

+0

Sí, está en desarrollo activo en este momento. – amber

+0

¿Qué hace el método 'SetNavigationButtonState'? –

Respuesta

16

Si configura un control principal/contenedor en Visible = false, establecer cualquier control secundario en Visible = true no tendrá ningún efecto. La propiedad Visible del control secundario seguirá siendo false.

No sé si es lo que sucede en este caso, ya que no conozco la estructura de los controles, pero parece ser un escenario probable.

Para solucionar esto primero debe configurar el control principal/contianer en Visible = true y LUEGO el/los control (es) hijo (s).

+0

Parece que el StepPanel se convirtió en el hijo de otro StepPanel que estaba oculto – amber

+3

Bueno que lo hayas solucionado. Mi última observación no es verdadera. Puede establecer la propiedad visible de controles secundarios en verdadero antes que el elemento primario. La propiedad seguirá siendo falsa, pero cuando establezca la propiedad principal en verdadera .Net recordará "mágicamente" el estado de los controles secundarios y los establecerá en consecuencia. –

+0

Creo que todo sucedió porque estaba tratando de alinear StepPanels, uno encima de otro, y el diseñador estaba tratando de ser útil. Agregué un código que indica que si el elemento primario de StepPanel no es el formulario para eliminarlo y luego lo agrega a la colección de control del formulario. – amber

0

if (xx == StepIndex)

sólo va a ser verdad y el final del bucle, a menos que me falta algo.

+0

Dado que no sabemos dónde está establecido StepIndex, no puede hacer esa suposición. –

+0

StepIndex rastrea en qué paso está el usuario y esto se correlaciona con el StepPanel en la matriz. – amber

+0

@Sani Huttunen tiene razón, leí mal el código en la parte superior. – Bit

0

Hay varias posibilidades. Cuando se adjunta un depurador en la línea:

SetNavigationButtonState(true); 

hace Steps[StepIndex].Visible == true? Si es así, entonces asegúrese de que StepIndex es en realidad el índice que esperaba (no desactivado por 1, y no refleja el paso "anterior"). Si verifica que el paso correcto se establece en verdadero, entonces debe actualizarlo en otro lugar.

si Steps[StepIndex].Visible == false justo después de que la ponemos a true, entonces o bien el comprador de la propiedad Visible está volviendo basados ​​en algunos de cálculo o un evento se activó de que está cambiando de nuevo a falso.

HTH.

Cuestiones relacionadas