none
¿Cuál es la manera más idónea de hacer lo que explico o qué alternativas tengo? RRS feed

  • Pregunta

  • Si tengo un formulario y quiero implementar procedimientos o métodos que hacen tareas específicas, por ejemplo un procedimiento Limpiar que ponga en blanco los controles del formulario y así otros procedimientos que interactúan con las etiquetas, botones o controles de texto.

    Al implementar estos procedimientos el código se va haciendo cada vez más grande y por tanto quiero poner esos procedimientos en módulos aparte.

    La consulta es qué alternativas tengo para hacer eso, es decir cuál es la mejor manera de referenciar desde el módulo a dicho formulario.

    sábado, 22 de julio de 2017 12:52

Respuestas

  • Hola James:

     La POO (Programación Orientada a Objetos) va encaminada precisamente a esto que comentas, a encapsular funcionalidades comunes en métodos o funciones, todas estas funcionalidades deberás de crearlas en clases (si usas Vb.net ve olvidando los módulos), para compartir funcionalidad comun en la capa de presentacion, entonces crea una clase de utilerias y para en el caso que comentas, pasas la instancia del formulario y listo no habra problemas.

     Un ejemplo de un metodo para hacer el Clear a controles de de un formulario, seria este:

    Public Shared Sub ClearControls(frm As Form)
    	Dim controles = From b In GetAllControls(frm) Where TypeOf b Is TextBox OrElse TypeOf b Is ComboBox OrElse TypeOf b Is CheckBoxb
    
    	For Each control As var In controles
    		If TypeOf control Is CheckBox Then
    			DirectCast(control, CheckBox).Checked = False
    		Else
    			control.Text = String.Empty
    		End If
    	Next
    End Sub

     Como veras, este método lo que recibe como parámetro es una instancia del formulario.

     Para otros temas como el guardar información, si conocieras Entity Framework sabrías que existe el Patrón Repository que precisamente evita que escribas mucho código para el mismo objetivo, solo como dato curioso te dejo el link con mas información:

    The Repository Pattern

     Espero que la información te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta James2016-2 sábado, 22 de julio de 2017 20:05
    sábado, 22 de julio de 2017 19:26

Todas las respuestas

  • Puedes crear modulos para cada tarea.

    YhorbyMatias

    sábado, 22 de julio de 2017 12:53
  • Un módulo una función seviría y como para mejorar si puedes colocar esos controles en un contenedor, por ejemplo en un panel y agruparlos allí, en el metodo que eligas podrias colocar por ejem.

     For Each Texts As TextBox In Panel1.Controls.OfType(Of TextBox)()
                Texts.Text = ""
            Next

    De esta manera todos los textbox quedarán vacíos al ejecutar la instrucción, sin afectar los demás text que tengas en tu Form

    Con igual criterio aplicas a los demás controles

    Saludos

    sábado, 22 de julio de 2017 15:05
  • Gracias por responder, pero creo que no me expliqué bien.

    Lo que consulto es cómo referencio a los controles del fomulario en un procedimiento ubicado en otro módulo, entiendo por ejemplo que una alternativa es pasarle al procedimiento el formulario como parámetro y así accedo a sus controles.

    La consulta era, ¿Qué otras alternativas hay para referenciar a los controles de un formulario en procedimientos que estén en un módulo distinto del código de la propia clase del formulario.

    sábado, 22 de julio de 2017 17:34
  • Perdona si no te interpreto, es que hoy estoy duro de entedederas. Lo que tu dices, creo, es que por ejemplo un módulo ejectuta una tarea para la  cula utiliza los valores de los controles que se encuentran en el form y una vez termine quieres limpiar para una nueva instancia. Si es así, como ejemplo, creas una función o otro modulo y lo llamas cada vez que termina la instrucción actual. Tomando el ejemplo anterior

     Public Sub Limpiar(ByVal frm As Form)
            For Each Texts As TextBox In Panel1.Controls.OfType(Of TextBox)()
                Texts.Text = ""
            Next
        End Sub

    El llamado sería, si estas dentro del form limpiar(Me) y si es en un módulo,invocando primero el nombre del form

    Form1.Limpiar(Me)

    Saludos


    • Editado Marcelo PF sábado, 22 de julio de 2017 18:33
    sábado, 22 de julio de 2017 18:31
  • Hola James:

     La POO (Programación Orientada a Objetos) va encaminada precisamente a esto que comentas, a encapsular funcionalidades comunes en métodos o funciones, todas estas funcionalidades deberás de crearlas en clases (si usas Vb.net ve olvidando los módulos), para compartir funcionalidad comun en la capa de presentacion, entonces crea una clase de utilerias y para en el caso que comentas, pasas la instancia del formulario y listo no habra problemas.

     Un ejemplo de un metodo para hacer el Clear a controles de de un formulario, seria este:

    Public Shared Sub ClearControls(frm As Form)
    	Dim controles = From b In GetAllControls(frm) Where TypeOf b Is TextBox OrElse TypeOf b Is ComboBox OrElse TypeOf b Is CheckBoxb
    
    	For Each control As var In controles
    		If TypeOf control Is CheckBox Then
    			DirectCast(control, CheckBox).Checked = False
    		Else
    			control.Text = String.Empty
    		End If
    	Next
    End Sub

     Como veras, este método lo que recibe como parámetro es una instancia del formulario.

     Para otros temas como el guardar información, si conocieras Entity Framework sabrías que existe el Patrón Repository que precisamente evita que escribas mucho código para el mismo objetivo, solo como dato curioso te dejo el link con mas información:

    The Repository Pattern

     Espero que la información te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta James2016-2 sábado, 22 de julio de 2017 20:05
    sábado, 22 de julio de 2017 19:26
  • Gracias, eso es lo que consultaba, entonces en lugar de un módulo declaro una clase y allí pongo, digamos, los métodos auxiliares. Veo que de esa forma el ClearControls del ejemplo, como es genérico, podría utilizarse para cualquier formulario.

    Gracias también por el enlace, lo voy a revisar con calma, interesante el tema.

    sábado, 22 de julio de 2017 20:05