elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  AYUDA Agilizar y reducir código. VB.NET Framework 4.5
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA Agilizar y reducir código. VB.NET Framework 4.5  (Leído 1,368 veces)
Torvic98

Desconectado Desconectado

Mensajes: 1


Ver Perfil
AYUDA Agilizar y reducir código. VB.NET Framework 4.5
« en: 2 Mayo 2014, 18:53 pm »

Hola, buenas a todos. Soy nuevo en el foro. Creo que me duda será fácil de resolver para muchos, pero yo como soy nuevo en esto del VB no consigo sacar la solución.  :huh:

La cuestión es que al iniciar un Form lleno de botones, necesito que se habiliten tantos botones como marque una variable definida en el anterior Form.

Bueno pues con la ayuda de mis escasos conocimientos he pensado en escribir esto:

Código:
Module Module1
    Dim botones As Integer
End Module

Public Class Form
    Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
        'La variable botones tiene el valor que se le ha dado en el Form que llama a este otro Form.
        While botones <> 0
            If botones = 1 Then Button1.Enabled = True
            If botones = 2 Then Button2.Enabled = True
            If botones = 3 Then Button3.Enabled = True
            If botones = 4 Then Button4.Enabled = True
            If botones = 5 Then Button5.Enabled = True
            If botones = 6 Then Button6.Enabled = True
            'etcétera, etcétera...
            botones = Val(botones) - 1
        End While
    End Sub
End Class

Pero sería agotador tener que escribir tantas condiciones IF...ELSE como botones así que lo que os pido es una alternativa parecida a esto que he intentado yo, sin éxito, jajaja:

Código:
Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
        'La variable botones tiene el valor que se le ha dado en el Form que llama a este otro Form.
        While botones <> 0
            Dim objetoboton As Object
            objetoboton = "Button" & botones
            objetoboton.Enable = True
            botones = Val(botones) - 1
        End While
    End Sub

Supongo que esto ultimo será un disparate, o algo así, pero no se me ocurre nada mejor. Jajaja  ;D

Si me podéis ayudar os lo agradecería mucho. Y si no os ha quedado claro preguntad y os lo intento explicar mejor.  :-\  


« Última modificación: 2 Mayo 2014, 19:06 pm por Torvic98 » En línea

El Benjo


Desconectado Desconectado

Mensajes: 390



Ver Perfil WWW
Re: AYUDA Agilizar y reducir código. VB.NET Framework 4.5
« Respuesta #1 en: 3 Mayo 2014, 00:10 am »

Puedes hacerlo mediante la colección de controles del Form. Es decir con "Me.Controls". Y compruebas si el control actual es un botton y si cumple otros requisistos que quieras comprobar. Te recomiendo que hagas esto sólo si son muchos botones. si no es así, continúa haciéndolo como lo tienes ahora.

Saludos.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: AYUDA Agilizar y reducir código. VB.NET Framework 4.5
« Respuesta #2 en: 3 Mayo 2014, 02:51 am »

Una manera simple:

Código
  1.    Private Sub Test()
  2.  
  3.        Dim Amount As Integer = -0I
  4.        Dim Unknown As Object = " 5 "
  5.  
  6.        ' No uses el método 'Val()' para validar, es algo prehistórico ...de VB6.
  7.        Integer.TryParse(Convert.ToString(Unknown).Trim, Amount)
  8.  
  9.        Dim Buttons As List(Of Button) =
  10.            GetDynamicControls(Of Button)(Collection:=Me.Controls,
  11.                                          NamePattern:="Button",
  12.                                          NameRange:=Enumerable.Range(1, Amount)) ' From Button1 To Button5
  13.  
  14.        Buttons.ForEach(Sub(bt As Button) bt.Enabled = False)
  15.  
  16.    End Sub

...Utilizando este método de uso genérico, el cual no he optimizado muy bien y habrá formas más limpias de escribirlo, pero sirve.

Código
  1.    ' Get Dynamic Controls
  2.    ' ( By Elektro )
  3.    '
  4.    ''' <summary>
  5.    ''' Gets a range of controls dinamycally by specifying the control's name pattern.
  6.    '''
  7.    ''' To use this method properly, the controls need to have a dynamic name.
  8.    '''
  9.    ''' Example:
  10.    ''' 'Button1', 'Button2', 'Button3', etc..
  11.    ''' Both has the same name and only differs the indexed number.
  12.    '''
  13.    ''' </summary>
  14.    ''' <typeparam name="T"></typeparam>
  15.    ''' <param name="Collection">Indicates the control collection where to find the controls.</param>
  16.    ''' <param name="NamePattern">Indicates the name pattern of the controls.</param>
  17.    ''' <param name="NameRange">Indicates the dynamic indexed pattern range.</param>
  18.    ''' <returns>List(Of T).</returns>
  19.    Private Function GetDynamicControls(Of T)(ByVal Collection As ControlCollection,
  20.                                              ByVal NamePattern As String,
  21.                                              ByVal NameRange As IEnumerable(Of Integer)) As List(Of T)
  22.  
  23.        If NameRange.Count < 1 Then Return Nothing
  24.  
  25.        Dim Controls As New List(Of T)
  26.  
  27.        For Each ctrl As T In Collection.OfType(Of T)()
  28.  
  29.            For Index As Integer = NameRange.Min To NameRange.Max
  30.  
  31.                If TryCast(ctrl, Control).Name.Equals(NamePattern & CStr(Index), StringComparison.OrdinalIgnoreCase) Then
  32.                    Controls.Add(ctrl)
  33.                End If
  34.  
  35.            Next Index
  36.  
  37.        Next ctrl
  38.  
  39.        Controls.Reverse() ' Sort them.
  40.  
  41.        Return Controls.ToList()
  42.  
  43.    End Function

Saludos
« Última modificación: 3 Mayo 2014, 02:57 am por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
COMO REDUCIR IMAGEN!!AYUDA PFAVOR
Diseño Gráfico
Bohrnier 8 8,955 Último mensaje 17 Diciembre 2005, 05:47 am
por PhenfiX
Manual 02 para aprender YII FRAMEWORK [ Instalacion de Mbmenu en YII FRAMEWORK]
PHP
Graphixx 0 4,775 Último mensaje 10 Noviembre 2011, 19:43 pm
por Graphixx
Ayuda programación C [agilizar programa]
Programación C/C++
David8 7 1,810 Último mensaje 13 Mayo 2014, 10:05 am
por eferion
REDUCIR CÓDIGO.NET
.NET (C#, VB.NET, ASP)
rochro 1 1,094 Último mensaje 8 Julio 2014, 09:04 am
por Eleкtro
Reducir líneas de código
Programación C/C++
rarrav26 2 1,024 Último mensaje 7 Abril 2015, 20:04 pm
por rarrav26
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines