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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Delegados Generales [Aporte]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Delegados Generales [Aporte]  (Leído 1,785 veces)
Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Delegados Generales [Aporte]
« en: 19 Febrero 2012, 22:59 pm »

Hace mucho tiempo que no publico nada, y la razón es que estoy superocupado :xD

Pero les traigo un aporte que seguro les servirá a muchos, cuando hice una aplicación que usaba Threads, y me di cuenta que no podía acceder a los controles, además eran demasiados controles, y propiedades para hacer un sub/function delegada para cada una de las propiedades de cada uno de los controles, lo resolví así:

Código
  1. #Region " Delegados "
  2.  
  3.        Public Delegate Sub SetProperty_Delegate( _
  4.                       ByVal ObjectControl As Control, _
  5.                       ByVal ObjectName As String, _
  6.                       ByVal ObjectValue As Object)
  7.  
  8.        Public Sub SetProperty( _
  9.                              ByVal ObjectControl As Control, _
  10.                              ByVal ObjectName As String, _
  11.                              ByVal ObjectValue As Object)
  12.            If ObjectControl.InvokeRequired Then
  13.                ObjectControl.Invoke(New SetProperty_Delegate(AddressOf SetProperty), _
  14.                                     New Object() {ObjectControl, ObjectName, ObjectValue})
  15.            Else
  16.                ObjectControl.GetType.GetProperty(ObjectName).SetValue( _
  17.                                                  ObjectControl, _
  18.                                                  ObjectValue, _
  19.                                                  Nothing)
  20.            End If
  21.        End Sub
  22.  
  23.        Public Delegate Function GetProperty_Delegate( _
  24.                          ByVal ObjectControl As Control, _
  25.                          ByVal ObjectName As String) As Object
  26.  
  27.        Public Function GetProperty(ByVal ObjectControl As Control, _
  28.                              ByVal ObjectName As String) As Object
  29.            If ObjectControl.InvokeRequired Then
  30.                Return ObjectControl.Invoke(New GetProperty_Delegate(AddressOf GetProperty), _
  31.                                     New Object() {ObjectControl, ObjectName})
  32.            Else
  33.                Return ObjectControl.GetType.GetProperty(ObjectName).GetValue( _
  34.                                                  ObjectControl, _
  35.                                                  Nothing)
  36.            End If
  37.        End Function
  38.  
  39.        Public Delegate Function CallMethod_Delegate( _
  40.                      ByVal ObjectControl As Control, _
  41.                      ByVal ObjectName As String, _
  42.                      ByVal ObjectParams As Object(), _
  43.                      ByVal ObjectParamsType As Type()) As Object
  44.  
  45.        Public Function CallMethod( _
  46.                              ByVal ObjectControl As Control, _
  47.                              ByVal ObjectName As String, _
  48.                              Optional ByVal ObjectParams As Object() = Nothing, _
  49.                              Optional ByVal ObjectParamsType As Type() = Nothing) As Object
  50.  
  51.            If ObjectParams Is Nothing Then
  52.                ObjectParams = New Object() {}
  53.            End If
  54.  
  55.            If ObjectControl.InvokeRequired Then
  56.                Return ObjectControl.Invoke(New CallMethod_Delegate(AddressOf CallMethod), _
  57.                                     New Object() {ObjectControl, ObjectName, ObjectParams, ObjectParamsType})
  58.            Else
  59.                If ObjectParamsType Is Nothing Then
  60.                    Return ObjectControl.GetType.GetMethod(ObjectName).Invoke( _
  61.                                      ObjectControl, _
  62.                                      ObjectParams)
  63.                Else
  64.                    Return ObjectControl.GetType.GetMethod(ObjectName, ObjectParamsType).Invoke( _
  65.                                      ObjectControl, _
  66.                                      ObjectParams)
  67.                End If
  68.            End If
  69.        End Function
  70.  
  71. #End Region

Establece, obtiene y llama propiedades y métodos de forma segura, solo por el nombre.

Algunos ejemplos, de como se usa:

Código
  1. SetProperty(Me, "Text", "Código Seguro") 'Establece la propiedad Text en Me
  2. GetProperty(Me, "Size") 'Obtiene el Size de Me
  3. CalMethod(Me, "Focus", New Object(){}, New Type(){}) 'Llama el sub Focus de Me
  4.  

CallMethod se llama, pasando el objeto del control, seguido del nombre del método a llamar, un array de object con contiene los parámetros, y un array de Type que contiene los tipos correspondientes para la lista de parámetros, para seleccionar el método correcto en caso de una sobrecarga.


« Última modificación: 19 Febrero 2012, 23:02 pm por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Delegados en hilos... algo raro « 1 2 »
.NET (C#, VB.NET, ASP)
Zzombi 10 11,143 Último mensaje 7 Diciembre 2009, 00:03 am
por [D4N93R]
[Tutorial] Delegados en .Net (C#)
.NET (C#, VB.NET, ASP)
[D4N93R] 0 7,664 Último mensaje 30 Julio 2010, 17:47 pm
por [D4N93R]
[Solucionado][Duda][C#]Eventos y delegados
.NET (C#, VB.NET, ASP)
final_frontier 5 5,677 Último mensaje 17 Agosto 2010, 14:55 pm
por [D4N93R]
Los controles de la class principal no se actualizan con delegados... :-/
.NET (C#, VB.NET, ASP)
Eleкtro 7 3,853 Último mensaje 21 Diciembre 2012, 07:11 am
por Eleкtro
Aporte de login + dudas generales que tengo
PHP
uluigi 1 1,966 Último mensaje 12 Julio 2015, 02:34 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines