User Tag List

Resultados 1 al 7 de 7

Tema: [VB.Net] Echadme una mano con esto, que estoy atrancaoooo!

  1. #1

    Fecha de ingreso
    Jul 2004
    Ubicación
    Algún lugar al sur de Londres
    Mensajes
    25,977
    Mencionado
    39 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    736
    Thanked in
    Agradecido 385 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    30

    [VB.Net] Echadme una mano con esto, que estoy atrancaoooo!

    Estoy haciendo un programa para gestionar quinielas (y de paso para no perder la práctica programando) y me ha surgido un problema que no sé cómo solucionar... porque no tiene ni pies ni cabeza! xD

    El tema es que tengo un formulario desde el cual podré mandar emails que se crea desde la pulsación de un botón en el formulario principal y justo antes de crearlo le mando una serie de datos utilizando un subprograma "friend" que luego utilizará para componer el email. El subprograma en cuestión es este:

    Código:
    Friend Sub precargarDatos(ByVal nodoQuiniela As TreeNode_Modificado, ByVal ayudaActivada As Boolean)
            Me.bocadillos.Active = ayudaActivada
            Me.nodoQuiniela = nodoQuiniela
        End Sub
    El treenode modificado es una clase creada por mí que hereda de treenode y almacena datos relativos a la quiniela (partidos, resultados, apuestas...) y esos datos son los que quiero utilizar en el email.

    AyudaActivada controla si los tooltip deben de estar activados, nada más.

    El problema es que por alguna razón no me guarda el treenode modificado que le paso en uno que tengo declarado en el formulario. Cuando trato de acceder a ese me.nodoQuiniela me dice que está vacío y me provoca una excepción por referencia nula. La gracia es que tengo otros formularios con los que utilizo un código similar y esto no pasa.

    Este es el código que utilizo para llamar al formulario desde el formulario principal:

    Código:
    Private Sub BTN_enviarMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_enviarMail.Click
            Dim formCorreo As New mandarEmail
            formCorreo.precargarDatos(CType(Me.TRV_quinielas.SelectedNode, TreeNode_Modificado), Me.bocadillos.Active)
            mandarEmail.ShowDialog()
        End Sub
    Se os ocurre alguna manera de solucionarlo? Alguien sabe por qué no guarda los datos que le paso?

    Gracias

  2. #2

    Fecha de ingreso
    Jan 2008
    Ubicación
    Madrid
    Mensajes
    4,465
    Mencionado
    14 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    88
    Agradecer Thanks Received 
    171
    Thanked in
    Agradecido 100 veces en [ARG:2 UNDEFINED] posts
    ¿Subprograma? yo les llamo subrutinas. Es que subprograma me suena como a procesos o hilos aparte. Bueno, da igual.
    Revisa la clase nodoQuiniela a ver si está cogiendo bien los datos, y que no estés pasando una referencia a un objeto local. Ya que se destruiria al salir de su función.

    No soy muy experto en VB.Net, pero en el tradicional se crea un Type y se asignan los datos. Con esto te evitas de referencias nulas.

  3. #3

    Fecha de ingreso
    Jul 2004
    Ubicación
    Algún lugar al sur de Londres
    Mensajes
    25,977
    Mencionado
    39 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    736
    Thanked in
    Agradecido 385 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    30
    Cita Iniciado por hardyx Ver mensaje
    ¿Subprograma? yo les llamo subrutinas. Es que subprograma me suena como a procesos o hilos aparte. Bueno, da igual.
    Revisa la clase nodoQuiniela a ver si está cogiendo bien los datos, y que no estés pasando una referencia a un objeto local. Ya que se destruiria al salir de su función.

    No soy muy experto en VB.Net, pero en el tradicional se crea un Type y se asignan los datos. Con esto te evitas de referencias nulas.
    La nodoQuiniela está declarada dentro del formulario, por lo que se puede acceder a ella desde cualquier subprograma (o subrutina, como lo queramos llamar ) de ese formulario y los datos en principio los guarda bien, porque puede acceder a ellos mientras está en ejecución el subprograma precargarDatos. El problema es que cuando se termina ese subprograma, el treenode modificado que le paso (que contiene los datos que necesito) y que a priori debería guardar en me.nodoQuiniela deja de existir por alguna razón que no entiendo y me dice que me.nodoQuiniela está vacío.

  4. #4

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,308
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    553
    Thanked in
    Agradecido 425 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    Mirate las variables ViewState o utiliza variables de sesion, igual intentas guardar datos en una variable que al recargar la página pierde de nuevo sus datos.

  5. #5

    Fecha de ingreso
    Jul 2004
    Ubicación
    Algún lugar al sur de Londres
    Mensajes
    25,977
    Mencionado
    39 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    736
    Thanked in
    Agradecido 385 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    30
    Cita Iniciado por GameMaster Ver mensaje
    Mirate las variables ViewState o utiliza variables de sesion, igual intentas guardar datos en una variable que al recargar la página pierde de nuevo sus datos.
    No sé a qué te refieres xD
    < - >
    Vale, ya lo he solucionado y como de costumbre era una gilipollez como una casa xDDDD
    Código:
    Private Sub BTN_enviarMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_enviarMail.Click
            Dim formCorreo As New mandarEmail
            formCorreo.precargarDatos(CType(Me.TRV_quinielas.SelectedNode, TreeNode_Modificado), Me.bocadillos.Active)
            mandarEmail.ShowDialog() << EPIC FAIL!!!
        End Sub
    No me memorizaba los datos porque no estaba llamando al formulario que recibía los datos xDDD

    Podéis apedrearme, lo merezco
    Última edición por neostalker; 14/06/2010 a las 12:54 Razón: Edición automática anti doble-post.

  6. #6

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,308
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    553
    Thanked in
    Agradecido 425 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    Pues el ViewState permite conservar por ejemplo el resultado actual de un gridView en memória, muy util para casos en que estas insertando o borrando líneas del gridView en tiempo de ejecución. La variable de sesion te permite guardar en memória una variable... Vamos, cosillas auxiliares hay muchas, pero claro tampoco he mirado a fondo tu problema para saber lo mejor. Me alegra que ya lo tengas resuelto, pero ten en cuenta estos conceptos que te pueden ayudar en otro marrón

  7. #7
    Yeti Sports 1 Champion!
    Fecha de ingreso
    Mar 2005
    Ubicación
    Currando pofin!
    Mensajes
    10,510
    Mencionado
    50 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    177
    Agradecer Thanks Received 
    337
    Thanked in
    Agradecido 176 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    22
    Cita Iniciado por neostalker Ver mensaje
    No sé a qué te refieres xD
    < - >
    Vale, ya lo he solucionado y como de costumbre era una gilipollez como una casa xDDDD
    Código:
    Private Sub BTN_enviarMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_enviarMail.Click
            Dim formCorreo As New mandarEmail
            formCorreo.precargarDatos(CType(Me.TRV_quinielas.SelectedNode, TreeNode_Modificado), Me.bocadillos.Active)
            mandarEmail.ShowDialog() << EPIC FAIL!!!
        End Sub
    No me memorizaba los datos porque no estaba llamando al formulario que recibía los datos xDDD

    Podéis apedrearme, lo merezco
    Hamigo ten cuidadin! no muestras el codigo y no se si ese formulario lo has escondido con un hide o que haces con el pero en aplicaciones que llaman de unos formularios a otros y una vez terminada la tarea, vuelven a los formularios desde los que los has llamado... te recomiendo que crees en cada formulario punteros para volver al principal, parecido a esto:

    Dim frmSelWork As New Form <- pon aqui el form al que quieras llamar
    frmSelWork.WindowState = FormWindowState.Maximized
    frmSelWork.Show()
    frmSelWork.FormOrigen(Me) <- Llamo a una rutina publica del formulario al que llamo para pasarle como parametro el formulario presente
    Me.Hide()

    ------------------- Y este codigo en el formulario al que llamas: ------------------------

    Private oFrmOrigen As Form


    Public Sub FormOrigen(ByVal oFrm As Form)
    oFrmOrigen = oFrm
    End Sub


    Private Sub Exporation_FormClosing(ByVal sender As Object, ByVal e As tem.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

    oFrmOrigen.Show()

    End Sub
    De esta forma cuando ocultas formularios, y los vuelves a llamar, te aseguras de no estas creando a diestro y siniestro instancias del mismo objeto de formulario , y es mas si había ya datos tecleados en ese formulario, de esta forma los mantendrías, y no que si simplemente haces un Showdialog, creas una nueva instancia del formulario dejando la anterior oculta para siempre y consumiendo memoria ocultando una y otra vez instancias del form principal.

    y a demas tendras en ese puntero al formulario llamante TODOS los datos del treeview que esta tal y como lo dejaste, y todos los objetos disponibles del formulario
    Última edición por nandove; 14/06/2010 a las 13:43

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •