VB.NET Cambio de visibilidad de múltiples etiquetas en tiempo de ejecución
im tratando de conseguir cambiar la visibilidad de diferentes etiquetas durante el tiempo de ejecución después de un botón haga clic
Dim labelsEmpty As New ArrayList
Dim allTxt As New List(Of Control)
For Each txt As TextBox In FindControlRecursive(allTxt, Me, GetType(TextBox))
If txt.Text = "" Then
If txt.Name = "TextBox1" Then
Else
'Dim textBoxName = txt.Name.ToString.Remove("txt").ToLower
labelsEmpty.Add(txt.Name.ToString.Replace("txt", "lblMsg"))
End If
End If
Next
For Each label In labelsEmpty
Dim Label1 As New Label
Label1.Name = label
Label1.Text = "Insert a value"
Label1.Visible = True
Next
Esto es lo que tengo, cada buzón de texto en mi forma tiene una etiqueta usada para decirle al usuario que había algún tipo de error, en este caso necesito conseguir qué cuadro de texto queda vacío y establecer la visibilidad de su etiqueta a la verdad (ya oculto de inicio de formulario), así que lo que hago es pasar por cada cuadro de texto en mi forma para ver cuál de los usuarios dejó vacío y luego tomar su nombre (ex: txtAge array) y reemplazarlos
Haciendo así obtengo un array con todos los nombres de etiquetas que deben ser fijados a visible = verdadero
Ahora necesito establecer su visibilidad y valor de texto, así que lo que hice es crear un para cada bucle y conseguir cada etiqueta en el array, pero el código que usé no está funcionando, ya he comprobado si hay elementos en el array y están allí, ¿alguna ayuda? Gracias.
Mi formulario: https://i.stack.imgur.com/qrawz.png
Pregunta hecha hace 3 años, 4 meses, 29 días - Por rubyrover
3 Respuestas:
-
En tu bucle final, estás creando nuevo etiquetas y nunca añadirlas a tu formulario. Si ya tiene etiquetas existentes en su formulario, desea hacer referencia a:
For Each label In labelsEmpty With Controls(label) .Text = "Insert a value" .Visible = True End With Next
La configuración de la propiedad Texto puede ser innecesaria si sus etiquetas ya tienen el texto necesario.
Si quieres crear nuevas etiquetas y luego agregarlas a tu formulario, necesitas añadir el control al formulario después de que lo hayas creado:
For Each label In labelsEmpty Dim Label1 As New Label With Label1 .Name = label .Text = "Insert a value" '.Top = 100 '.Left = 100 .Visible = True End With Controls.Add(Label1) Next
Si lo haces de esta manera, necesitarás alguna forma de configurar las propiedades Top e Left para que las etiquetas se ajusten correctamente a tus cuadros de texto existentes. Hay varias maneras de hacer eso, pero te dejaré eso, ya que estoy bastante seguro de que mi primera solución responde a tu pregunta.
Respondida el Dec 17, 2020 a las 08:30 - por codercentaur
Votos positivos: 0 | Votos negativos: 0 -
El problema en tu código radica en que estás creando un nuevo objeto
Label
dentro del bucleFor Each
, pero no estás agregando este objeto al formulario. Por lo tanto, aunque establezcas la visibilidad delLabel
, no se reflejará en la interfaz de usuario.Para solucionar esto, debes primero agregar el objeto
Label
creado al formulario utilizando el métodoControls.Add
. Aquí te dejo un ejemplo de cómo puedes modificar tu código para lograrlo:vb Dim allLabels As New List(Of Label) For Each labelName As String In labelsEmpty Dim newLabel As New Label newLabel.Name = labelName newLabel.Text = "Insert a value" newLabel.Visible = True ' Agregar el Label al formulario Me.Controls.Add(newLabel) ' Agregar el Label a la lista para futuras referencias allLabels.Add(newLabel) Next
Con esta modificación, los
Label
que se creen en el bucle serán visibles en la interfaz de usuario. Además, se agregan a la listaallLabels
, que podrás utilizar posteriormente si necesitas manipular o acceder a estos controles en el futuro.Espero que esta solución te sea útil. Si tienes alguna otra pregunta o duda, ¡no dudes en decírmelo!
Respondida el Dec 18, 2020 a las 08:33 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El código que proporcionaste tiene algunos problemas:
- Estás creando una nueva etiqueta para cada elemento del array `labelsEmpty` y asignándole el nombre y el texto, pero no estás agregando estas etiquetas al formulario. Esto significa que las etiquetas no serán visibles.
- Estás intentando establecer la propiedad `Visible` de etiquetas que no existen en el formulario.
Para solucionar estos problemas, puedes utilizar el siguiente código:
vb.net For Each labelName In labelsEmpty Dim label As Label = CType(Me.FindControl(labelName), Label) If label IsNot Nothing Then label.Visible = True label.Text = "Insert a value" End If Next
Este código recorre el array
labelsEmpty
, encuentra cada etiqueta en el formulario mediante el métodoFindControl
y establece su propiedadVisible
enTrue
y su propiedadText
en "Insert a value".Nota: Asegúrate de que las etiquetas que deseas hacer visibles tengan el mismo nombre que los elementos del array
labelsEmpty
.Respondida el Dec 18, 2020 a las 08:36 - por Gemini
Votos positivos: 0 | Votos negativos: 0