Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al pasar el nombre de un form

Estas en el tema de Problema al pasar el nombre de un form en el foro de .NET en Foros del Web. Hola a todos. Veréis. Estoy encapsulando código y eliminando codigo redundante. He creado un modulo que lo llaman 2 forms, ya que este modulo hará ...
  #1 (permalink)  
Antiguo 07/02/2011, 03:54
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Exclamación Problema al pasar el nombre de un form

Hola a todos.

Veréis. Estoy encapsulando código y eliminando codigo redundante.

He creado un modulo que lo llaman 2 forms, ya que este modulo hará cosas que pueden afectar a estos dos forms pero, con un select case, selecciono el form que quiero que afecte.

Imaginad el siguiente ejemplo:

Formulario A (de nombre: guardar)
Formulario B (de nombre: eliminar)

El modulo se llama: escoge_form

Ahora llamo el modulo desde el formulario A y le paso su nombre

Código VB .NET:
Ver original
  1. private sub pasa_formularioA
  2.      'voy al modulo y le paso el nombre del formulario
  3.      escoge_form.escoge_form(1)
  4. end sub

Lo mismo hago con el formulario B

Código VB .NET:
Ver original
  1. private sub pasa_formularioB
  2.      'voy al modulo y le paso el caso que quiero
  3.      escoge_form.escoge_form(2)
  4. end sub

Entonces, el modulo tiene lo siguiente

Código VB .NET:
Ver original
  1. module escoge_form
  2.      public sub escoge_form(byval caso as string)
  3.           'declaramos para tener el nombre del formulario en una variable
  4.           dim formulario as form
  5.  
  6.           'seleccionamos el nombre del formulario dependiendo del caso
  7.           select case formulario
  8.                case 1
  9.                     formulario = formularioA.name
  10.                case 2
  11.                     formulario = formularioB.name
  12.           end select
  13.  
  14.           'una vez con el nombre del formulario, hago un with para que afecte_
  15.           '_a un formulario o otro
  16.           with formulario
  17.                .txt_observaciones = "Perfecto"
  18.           end with
  19.      end sub
  20. end module

Pues claro, en el with falla, porque ".txt_observaciones" me marca error, ya que no forma parte. Cuando en verdad si que forma parte, lo que pasa es que el with no coge el nombre del form...

Tiene alguna solución este problema??

Muchas gracias
  #2 (permalink)  
Antiguo 07/02/2011, 05:08
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Estoy cambiando un poco la estructura pero me sigue dando problemas.

Ahora lo que hago es pasarle el formulario, pero sigue igual:

Código VB .NET:
Ver original
  1. private sub pasa_formularioA
  2.      'voy al modulo y le paso el nombre del formulario
  3.      escoge_form.escoge_form(me)
  4. end sub

Lo mismo hago con el formulario B

Código VB .NET:
Ver original
  1. private sub pasa_formularioB
  2.      'voy al modulo y le paso el nombre del formulario
  3.      escoge_form.escoge_form(me)
  4. end sub

Entonces, el modulo tiene lo siguiente

Código VB .NET:
Ver original
  1. module escoge_form
  2.      public sub escoge_form(byval formulario as form)
  3.           formulario.name = "FormularioA"
  4.  
  5.           'una vez con el nombre del formulario, hago un with
  6.           with formulario
  7.                .txt_observaciones = "Perfecto"
  8.           end with
  9.      end sub
  10. end module

Pues nada, me sigue dando error el ".txt_observaciones" diciendo que no es miembro de formulario.

Pero como no va a ser miembro si es el mismo nombre que tiene el formulario que lo contiene???
  #3 (permalink)  
Antiguo 07/02/2011, 06:19
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Ahora lo que he hecho es declarar en el modulo un parametro public en el que le paso el formulario

Código VB .NET:
Ver original
  1. private sub pasa_formularioA
  2.      'le paso el nombre del formulario
  3.      escoge_form.formulario = me
  4.  
  5.      'hago la llamada al modulo
  6.      escoge_form.escoge_form()
  7. end sub

Y en el modulo pues la declaro Public como form

Código VB .NET:
Ver original
  1. module escoge_form
  2.      public formulario as form
  3.  
  4.      public sub escoge_form(byval formulario as form)
  5.           'como he pasado el formulario como public
  6.           'debería tener el formulario en memoria
  7.           'una vez con el formulario, hago un with
  8.           with formulario
  9.                .txt_observaciones = "Perfecto"
  10.           end with
  11.      end sub
  12. end module

Pues nada, sigue sin funcionar...
  #4 (permalink)  
Antiguo 07/02/2011, 12:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Sigo probando pero no lo consigo.... :(
  #5 (permalink)  
Antiguo 07/02/2011, 12:54
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

pero si pruebas haciendo esto, tu error es que estas sobreescribiendo el parametro formulario es decir nunca va tomar el public pq lo has dicho q sea local en el procedimiento
la cual no se ha asignado nada

Código vb.net:
Ver original
  1. module escoge_form
  2.      public formulario as form
  3.  
  4.      public sub escoge_form()
  5.           'como he pasado el formulario como public
  6.           'debería tener el formulario en memoria
  7.           'una vez con el formulario, hago un with
  8.           with formulario
  9.                .txt_observaciones = "Perfecto"
  10.           end with
  11.      end sub
  12. end module
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #6 (permalink)  
Antiguo 07/02/2011, 14:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Cita:
Iniciado por Dradi7 Ver Mensaje
pero si pruebas haciendo esto, tu error es que estas sobreescribiendo el parametro formulario es decir nunca va tomar el public pq lo has dicho q sea local en el procedimiento
la cual no se ha asignado nada

Código vb.net:
Ver original
  1. module escoge_form
  2.      public formulario as form
  3.  
  4.      public sub escoge_form()
  5.           'como he pasado el formulario como public
  6.           'debería tener el formulario en memoria
  7.           'una vez con el formulario, hago un with
  8.           with formulario
  9.                .txt_observaciones = "Perfecto"
  10.           end with
  11.      end sub
  12. end module
Como que no?? Lo asigno aquí:

Código VB .NET:
Ver original
  1. private sub pasa_formularioA
  2.      'le paso el nombre del formulario
  3.      escoge_form.formulario = me
  4.  
  5.      'hago la llamada al modulo
  6.      escoge_form.escoge_form()
  7. end sub
  #7 (permalink)  
Antiguo 07/02/2011, 16:13
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

me estas interprentando mal lo q pasa es como te dije una cosa es q en tu modulo digas

public formulario as form

a q digas

public sub escoge_form(byval formulario as form)

ya q estas enviando al momento de hacer esto

escoge_form.formulario = me al parametro publico public formulario as form
pero como tu estas diciendo
public sub escoge_form(byval formulario as form)
dentro de este procedimiento formulario es igual a null porque no se le asigna nada
entonces al hacer with formulario estas tratando de decir with null
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 07/02/2011, 16:27
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Cita:
Iniciado por Dradi7 Ver Mensaje
me estas interprentando mal lo q pasa es como te dije una cosa es q en tu modulo digas

public formulario as form

a q digas

public sub escoge_form(byval formulario as form)

ya q estas enviando al momento de hacer esto

escoge_form.formulario = me al parametro publico public formulario as form
pero como tu estas diciendo
public sub escoge_form(byval formulario as form)
dentro de este procedimiento formulario es igual a null porque no se le asigna nada
entonces al hacer with formulario estas tratando de decir with null
Pero si te fijas, después no le paso como parámetro y me sigue dando error igual...
  #9 (permalink)  
Antiguo 07/02/2011, 16:30
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

pero te dije q te guiaras segun mi codigo

Código vb.net:
Ver original
  1. module escoge_form
  2.      public formulario as form
  3.  
  4.      public sub escoge_form()
  5.           'como he pasado el formulario como public
  6.           'debería tener el formulario en memoria
  7.           'una vez con el formulario, hago un with
  8.           with formulario
  9.                .txt_observaciones = "Perfecto"
  10.           end with
  11.      end sub
  12. end module

Código vb.net:
Ver original
  1. private sub pasa_formularioA
  2.      'le paso el nombre del formulario
  3.      escoge_form.formulario = me
  4.  
  5.      'hago la llamada al modulo
  6.      escoge_form.escoge_form()
  7. end sub

el error te daba porque estabas haciendo public sub escoge_form(formulario as form)
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #10 (permalink)  
Antiguo 08/02/2011, 06:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Sigue sin funcionar :(
  #11 (permalink)  
Antiguo 08/02/2011, 08:59
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

cual es tu codigo q has puesto completo???

ademas segun entendi tu quieres enviar a otro formulario un dato o no
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #12 (permalink)  
Antiguo 08/02/2011, 12:07
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

El codigo que uso completo puedes verlo en cualquiera de las 3 primeras respuestas, cualquier estructura me sirve.

A ver, lo que yo quiero pasar al modulo es el nombre del formulario que llama al módulo.

Si por ejemplo tengo un FormularioA y un FormularioB, y yo hago el llamamiento al modulo desde el formularioA, quiero que en el modulo, la variable formulario contenga FormularioA, para que me funcione el with

Ahora mismo, por mucho que le pase el formulario (mediante escoge_form.formulario = me), la variable formulario del modulo (que es del tipo form), pasa algo curioso:

Si hago un messagebox.show(formulario.name.tostring), me muestra FormularioA, es decir, que sabe que ha sido el formularioA quien ha sido.

Pero cuando hago el with formulario, por mucho que ponga el ".txt_observaciones", me marca error, diciendo que no forma parte.

Entonces.... en que quedamos? Si la variable formulario contiene FormularioA, porqué el With no lo entiende???

Aquí es donde está el problema. Si a mi el With me detectara que es FormularioA (o FormularioB según el caso), yo encantado, pero es que no hay manera :(

Saludos
  #13 (permalink)  
Antiguo 08/02/2011, 12:20
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

Entonces tendras q usar TRYCAST, como mejorar tu codigo

Código vb.net:
Ver original
  1. module escoge_form
  2.      public formulario as form
  3.  
  4.      public sub escoge_form()
  5.           'como he pasado el formulario como public
  6.           'debería tener el formulario en memoria
  7.           'una vez con el formulario, hago un with
  8.           if formulario isnot nothing then
  9.              if formulario.name = "FormularioA" then
  10.                 with trycast(formulario,formularioA)
  11.                         .txt_Observaciones.txt = "lo q quieras"
  12.                 end with
  13.              end if
  14.           else
  15.                msgbox("No Asigno ninun Formulario",32,"Aviso")
  16.           end if
  17.      end sub
  18. end module
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #14 (permalink)  
Antiguo 08/02/2011, 17:23
 
Fecha de Ingreso: septiembre-2006
Mensajes: 34
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Problema al pasar el nombre de un form

Código:
      private sub pasa_formularioA
     'voy al modulo y le paso el nombre del formulario
     escoge_form.escoge_form(me)
     end sub
para el caso del modulo algo asi
Código:
module escoge_form
     public sub escoge_form(byref  formulario  form)
  ' aqui lo que quieres hacer con el formulario 
 with formulario  
               .txt_observaciones = "Perfecto"

          end with
     end sub
end module
si lo que quieres es escribir codigo comun en los dos formulario esta seria una forma pasando el formulario como parametro por referencia no necesitas el select case, pero si las operaciones son especificas para cada formulario pues solo pones un if, a mi ver el error es que pasas como parametro el numero de formulario en la variable caso que es string pero lo que evaluas en el select case es una estancia nueva de un formulario, el cual nada tiene que ver con formluarioA o B, por lo que lo logico es que este formulario no contenga nada de controles ecepto asi mismo.
pero si necesitas crear dinamicamente el formulario uno o el dos
entonces necesitarias convertir la variable formulario del tipo form al tipo formularioA o B, pues son estos los que tienen los controles que utilizas en tu codigo.

Última edición por kisko84; 08/02/2011 a las 17:34
  #15 (permalink)  
Antiguo 09/02/2011, 05:15
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Hola amigos.

kisko84, he probado tu solución pero tampoco se soluciona.

Mirad, os ilustro para que veais el código a ver si lo podeis ver mejor que explicandolo de letra:

Esto es lo que paso desde el formulario



Y esto es el modulo, con el sub creado en que le paso por referencia el formulario que le paso



Siento los comentarios, están en catalán... :(
  #16 (permalink)  
Antiguo 09/02/2011, 05:38
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

He probado la solución de Dradi7 y con el Trycast funciona a la perfección!

No pongo el if porqué como lo pasaré solo por dos formularios, él ya sabrá que formulario es, no hay margen de error.

Ilustro:



Muchas gracias por todo!! :D
  #17 (permalink)  
Antiguo 09/02/2011, 08:50
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Problema al pasar el nombre de un form

de nada estamos para ayudarnos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #18 (permalink)  
Antiguo 11/02/2011, 08:11
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Hola a todos.

Siento haber respondido tan tarde al tema pero hoy he estado haciendo pruebas.

Vereis, con el TryCast me coje el formulario pero no me coje el nombre.

Es decir, si escribo formulario.pregunta1_rdb1.checked, no me lo acepta porqué dice que no forma parte de formulario y me lanza la excepción MissingMemberException.

Supongo que es porqué entre el formulario y el modulo, los radiobuttons que tiene el formulario no son public, pero no veo la forma de hacer que lo sean.

Os paso el codigo juntamente con el error a ver si podeis localizar el error, que yo me estoy volviendo loco :(

Este es el formulario



Este es el modulo, que inspecciona los radiobuttons del formulario si están checked o no



Este es el error que sale

  #19 (permalink)  
Antiguo 14/02/2011, 01:30
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Nadie? :(

Se entiende o hay algún problema?
  #20 (permalink)  
Antiguo 16/02/2011, 01:27
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Hola amigos.

Siento la insistencia pero no se otra forma de continuar si no es repitiendo código (para el tema del With) y eso en cuestión de optimización queda fatal...

Gracias de antemano por la ayuda :)
  #21 (permalink)  
Antiguo 16/02/2011, 03:02
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problema al pasar el nombre de un form

Hola a todos.

Ya he dado con la solución.

Hay que ir a propiedades y, en el campo modifier, que originalmente está en Friend, hay que pasarlo a Public

Un cordial saludo a todos :)

Etiquetas: visualbasic, visualstudio2008, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:27.