none
Importar controles RRS feed

  • Pregunta

  • Buenos días,

    Estoy empezando a familiarizarme con Visual Studio Comunity 2019, y me he encontrado con un problema para el que no he encontrado solución.

    Tengo un proyecto que VSC 2019 ha “traducido” desde ViisuaL Basic 2008, y funciona correctamente. A este proyecto le he agregado un nuevo formulario “frmPresuPago” con el procedimiento “Proyecto/Agregar formulario (Windows Forms)…”, que también funciona satisfactoriamente.  

    El problema es que no me permite acceder a los controles de ese formulario desde un Módulo, cuando no tengo ningún problema para hacer esa misma operativa desde el formulario “frmAbre”, que ya existía en la versión “traducida”.

    He observado algunas diferencias entre los dos formularios, pero como no las entiendo no me ayudan a resolver el problema: al escribir el formulario “frmAbre” y agregar el punto aparecen sus controles y puedo elegir uno, y sale la descripción “Property My.MyProject…”. Al escribir el formulario “frmPresuPago” y agregar el punto no despliega sus controles, y la descripción es diferente “Class Presupuesto20…”.

    También he tenido algunos problemas al agregar formularios mediante el procedimiento “Proyecto/Agregar elemento existente”, una vez que he copiado en la carpeta del proyecto los tres archivos que quiero agregar (Designer, resx y vb).

    Estaré muy agradecido de que alguien me explique lo que estoy haciendo mal.

    Muchas gracias.

    Carlos

    miércoles, 7 de octubre de 2020 8:20

Todas las respuestas

  • Hola:
    > El problema es que no me permite acceder a los controles de ese formulario desde un Módulo <
    ¿Puedes poner el codigo de como intentas acceder a los controles?

    > he tenido algunos problemas al agregar formularios mediante el procedimiento Proyecto/Agregar elemento existente, una vez que he copiado en la carpeta del proyecto los tres archivos que quiero agregar (Designer, resx y vb). <
    Tienes que seleccionar SOLO el fichero con extension vb 


    Un saludo desde Bilbo
    Carlos
    miércoles, 7 de octubre de 2020 8:29
  • Gracias por responder.

    Tengo funcionando perfectamente este grupo de instrucciones:

                    FrmAbre.lblAvisoAbre.Text = vbCrLf & vbCrLf
                    FrmAbre.lblAvisoAbre.Text &= "Preparando los datos: espera un poco, por favor... "
                    FrmAbre.lblPensado.Text = "Mientras tanto ¿Sabías lo que dijo "
                    FrmAbre.lblPensado.Text &= dbRead("Pensador").ToString & "?" & vbCrLf & vbCrLf
                    FrmAbre.lblPensado.Text &= "''" & dbRead("Pensado").ToString & "''"
                    FrmAbre.lblPensado.Visible = True
                    FrmAbre.lblAvisoAbre.Visible = True

    Saludos

    miércoles, 7 de octubre de 2020 16:03
  • Hola:

    > El problema es que no me permite acceder a los controles de ese formulario desde un Módulo <
    > Tengo funcionando perfectamente este grupo de instrucciones <

    ¿Pero tienes algun problema porque estas 2 afirmaciones son contradictorias?

    Un saludo desde Bilbo
    Carlos
    miércoles, 7 de octubre de 2020 18:42
  • Disculpa si no me he expresado bien.

    A tu pregunta "¿Puedes poner el código de como intentas acceder a los controles?" He copiado el código que tengo funcionando para el formulario “frmAbre”, que era el original "traducido", y la cuestión es que no puedo hacer lo mismo para el formulario “frmPresuPago”, que es el de nueva creación.

    Envío una imagen de ejemplo.

    miércoles, 7 de octubre de 2020 19:35
  • Hola:
    El ejemplo que te expongo consta de 2 Form.
    Tu lo que quieres conseguir es ver los controles del Form llamante desde el Form llamado

    Codigo del Form llamador

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form3
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                Dim CadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=NorthWind;Integrated Security=True"
                Dim lsQuery As String = "SELECT FirstName, LastName FROM Employees"
                Using Conexion As New SqlConnection(CadenaSQL)
                    Using DataAdapter As New SqlDataAdapter(lsQuery, Conexion)
                        Dim lDataTable As New DataTable
                        DataAdapter.Fill(lDataTable)
                        DataGridView1.DataSource = lDataTable
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            Dim loFila As DataGridViewRow = DataGridView1.CurrentRow()
            txtPadreFirstName.Text = loFila.Cells("FirstName").Value.ToString
            txtPadreLastName.Text = loFila.Cells("LastName").Value.ToString
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Using loForm As New Form6
                loForm.Padre = Me
                loForm.ShowDialog()
            End Using
        End Sub
    End Class


    Codigo del Form llamado

    Public Class Form6
        Public Property Padre As Form3

        Private Sub Form6_Load(sender As Object, e As EventArgs) Handles Me.Load
            txtHijoFirstName.Text = Padre.txtPadreFirstName.Text
            txtHijoLastName.Text = Padre.txtPadreLastName.Text
        End Sub
    End Class

    Imagen del resultado


    Un saludo desde Bilbo
    Carlos
    jueves, 8 de octubre de 2020 11:55
  • Hola, 

    Te agradezco el trabajo que te has tomado, pero no veo que responda a la necesidad que yo planteaba: acceder desde un mismo lugar, en mi caso un Módulo, a los controles de 2 formularios diferentes.

    La pregunta sigue siendo la misma: ¿Cuál es la diferencia entre esos dos formularios para que pueda acceder a los controles de uno de ellos y a los del otro no?

    Como decía al inicio de este hilo, me da la impresión que la solución del asunto pasa por igualar la condición o el estado o lo que sea de ambos formularios.

    El que si permite acceso a sus controles, el frmAbre al que me refiero como "traducido" tiene una definición distinta del otro al que al que me refiero como "creado", que es la que sale cuando paso el cursor encima del nombre del formulario al que estoy invocando. Envío las imágenes de ejemplo de cada uno.

    Saludos

    jueves, 8 de octubre de 2020 17:18
  • Hola:

    ¿Puedes poner como llamas y ves los controles de un Form desde un modulo?
    P.D.
    El texto de las imagenes que muestras NO lo puedo distinguir, es demasiado pequeño.
    Es mejor que escribas el texto

    Un saludo desde Bilbo
    Carlos

    jueves, 8 de octubre de 2020 18:21
  • Hola,

    Copio el código tal cual: son los del caso en que sí funciona y puedo acceder sin problema.

    FrmAbre.lblAvisoAbre.Text = "Preparando los datos: espera un poco, por favor... "
    FrmAbre.lblPensado.Text = "Mientras tanto ¿Sabías lo que dijo "

    Las imágenes eran para ilustrar lo que decía al iniciar la conversación, sobre dónde estaba la diferencia entre un formulario y otro, donde me parecía a mí que podría estar el problema "He observado algunas diferencias entre los dos formularios, pero como no las entiendo no me ayudan a resolver el problema: al escribir el formulario “frmAbre” y agregar el punto aparecen sus controles y puedo elegir uno, y sale la descripción “Property My.MyProject…”. Al escribir el formulario “frmPresuPago” y agregar el punto no despliega sus controles, y la descripción es diferente “Class Presupuesto20…”."

    Saludos

    jueves, 8 de octubre de 2020 19:01
  • Hola Odisea 2001

    Con respecto a la consulta realizada, ¿Has podido solucionar tu problema? Por favor, háznoslo saber.  

    Es un gusto atender tus consultas. 

    Saludos 


    miércoles, 14 de octubre de 2020 20:57
    Moderador
  • Buenos días, Óscar

    No, mi pregunta sigue sin solución.

    Desde el principio J. Carlos Herrero ha estado conversando conmigo para resolver mi pregunta. El pasado día 8 respondí a la petición de datos que me hizo, y no he vuelto a tener nuevas respuestas ni de él ni de otras personas.

    Saludos

    jueves, 15 de octubre de 2020 6:59
  • Hola:
    El pasado dia 08/10/2020 te preguntaba lo siguiente
    ¿Puedes poner como llamas y ves los controles de un Form desde un modulo?

    NO me has contestado a dicha pregunta, sigues contando lo mismo que en el primer mensage, por lo tanto sino tengo dicha informacion NO se que debo de responder

    Un saludo desde Bilbo
    Carlos
    jueves, 15 de octubre de 2020 11:21
  • Hola,

    Entonces el problema es que no he entendido bien la pregunta, o no acabo de explicarme, pero volveré a intentarlo.

    Tu primera pregunta fue "¿Puedes poner el codigo de como intentas acceder a los controles?"

    Y copié el código que utilizaba para "acceder" a esos controles, aclarando que código funcionaba para un formulario pero no para otro.

    Tu nueva pregunta es "¿Puedes poner como llamas y ves los controles de un Form desde un modulo?"

    Por "llamar" a un control desde un módulo entiendo la forma en que intento acceder, y por ese motivo he enviado el código utilizado y la imagen de dónde está insertado el código.

    Lo siento, pero no se me ocurre otra forma de exponer la información que me pides. Tal vez si pones un ejemplo de lo que necesitas...

    Saludos



    jueves, 15 de octubre de 2020 16:58
  • Hola:
    Te pongo un ejemplo de codigo de llamar a un Form desde un modulo.
    Normalmente desde un modulo se llama al formulario inicial del projecto


    Option Strict On
    Option Explicit On

    Module Inicio
        Private _prevInstanceMutex As System.Threading.Mutex

        Public Sub Main()
            ' Compruebo si existe una instancia 
            If lF_PreviaInstancia() = True Then
                MessageBox.Show("La aplicacion ya se esta ejecutando", "Sub Main", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Return
            End If
            'Ejecutamos nuestra aplicación
            Application.EnableVisualStyles()
            Dim loPrincipal As New FrmInicial
            loPrincipal.Show()
        End Sub

        Private Function lF_PreviaInstancia() As Boolean
            Dim lbNuevo As Boolean
            ' Obtengo el nombre completo del ensamblado para usarlo como nombre del mutex
            Dim lsNombre As String = Reflection.Assembly.GetEntryAssembly.FullName
            ' Creo el mutex intentando ser su propietario. Si el mutex ya fue creado por otra instancia, no se va a poder tomar propiedad del 'mutex y nuevo sera = false
            _prevInstanceMutex = New System.Threading.Mutex(True, lsNombre, lbNuevo)
            Return Not lbNuevo
        End Function
    End Module

    Desde un Form llamar a otro Form

            Dim loForm As New FrmLicencia
            loForm.Show()

    Otra forma

            Using loForm As New FrmSinAsignar
                loForm.ShowDialog()
            End Using

    ¿Puedes poner como llamas a un Form desde un modulo y desde otro Form?


    Un saludo desde Bilbo
    Carlos

    jueves, 15 de octubre de 2020 17:50
  • Te agradezco las molestias que te has tomado para ayudarme, pero no estoy intentando acceder al formulario sino a sus controles.

    Para llamar a un formulario desde otro, porque sigue funcionando, sigo utilizando el mismo procedimiento de versiones anteriores de Visual Basic:

       Dim Formu As New FrmFechaPresu()

       Formu.ShowDialog()

    Saludos


    • Editado Odisea 2001 jueves, 15 de octubre de 2020 19:23
    jueves, 15 de octubre de 2020 18:13
  • Empeñado en encontrar una solución, se me ocurrió hacer una copia exacta del formulario en conflicto. Después he ido haciendo cambios y probando el resultado, hasta que conseguí tener uno satisfactorio: cuando he eliminado este código, y he traído ese parámetro al formulario mediante una variable pública.

        Public Sub New(ByVal Importe As Double)

            InitializeComponent()

            Pagado = Importe

        End Sub

    Me ha parecido interesante dejar constancia de esta solución, por si pudiera ser de utilidad para otra persona que busque respuesta a la misma pregunta. 

    No obstante, porque me gusta entender las cosas, estaría siempre agradecido de una explicación sobre esa variación en el comportamiento.

    martes, 20 de octubre de 2020 17:16