Llevo unos cuantos días sin aportar nada al blog, no por falta de ganas sino por falta de tiempo debido en gran medida a que… 1) me he quedado sin coche y eso me hace perder varias horas útiles a lo largo de la semana… y 2) ha comenzado ya el cuatrimestre en la facultad y todavía me estoy organizando para intentar no morir en el intento de sacar adelante los proyectos profesionales y los estudios al mismo tiempo. De todos modos estoy trabajando tanto en la traducción de los dos posts con más visitas del blog (quiero añadir algunos artículos en inglés en este blog para intentar servir de ayuda a más gente -por eso traduciré sólo los posts que aparecen como más visitados en las estadísticas-) como en la creación de una librería que me han pedido ya varias veces.
De todos modos hoy dejo un dato curioso. ¿Cuál es el número máximo de controles que se pueden agregar a un formulario en VisualBasic.NET? Probablemente la mayoría no se lo habrá planteado nunca porque la respuesta es en realidad “los suficientes” o “más de los que nunca he necesitado”. ¡Pues no! Adjunto código e imagen del error que genera:
' Author: Albert Mata (www.albertmata.net)
' Date: 20080923
' Description: Class to get a 'too many controls Win32Exception'.
'--------------------------------------------------------------------
Public Class MaximumNumberControls
'----------------------------------------------------------------
' Simple (and silly) code to show how many controls we can add
' in a VisualBasic.NET form before it crashes.
'----------------------------------------------------------------
Private Sub MaximumNumberControls_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim TXT As TextBox
Dim i As Integer = 1
While True
TXT = New TextBox()
Me.Controls.Add(TXT)
i += 1
'Win32Exception when i = 9973 for TextBox!!!
'Win32Exception when i = 9974 for Label!!!
'Win32Exception when i = 9973 for Button!!!
'Win32Exception when i = 9973 for Panel!!!
End While
End Sub
End Class

Así que en un formulario se admiten máximo unos 10.000 controles…
Todo esto viene a que ayer y hoy he estado peleándome con este asunto. Por un lado tengo un control personalizado que se forma con unos 150 controles entre TextBox y Label. Este control representa una previsión de stock de un determinado material para los siguientes N meses. Los TextBox y Label en cuestión son muy pequeños, pero todos muestran información única imprescindible que en algunos casos se debe poder modificar. No me sirve un DataGridView ni similares.
Sin embargo no tengo un solo material, sino cientos. De modo que cuando intento mostrar en un formulario un número demasiado elevado de estos controles personalizados obtengo ese error Win32Exception (concretamente al intentar mostrar el material 66, lógico porque 9.973 / 150 = 66).
Finalmente he encontrado la solución dando un par de vueltas al diseño de las clases involucradas. No la posteo porque es demasiado específica y nada interesante aportaría su estudio. Pero ya sabéis… si estáis diseñando controles personalizados un poco complejos, ¡tened cuidado cuando os acerquéis a los 10.000 controles en total!
PD. Ignoro si el número exacto depende de plataforma, versión de sistema operativo y demás. En cualquier caso la cifra es representativa…
Últimos comentarios
RSS