none
usar un string para hacer referencia a un formulario

    Pregunta

  • Tengo un formulario con nombre frm_compras y una variable que tiene almacenado la cadena "frm_compras".Como puedo usar esta cadena para hacer referencia al formulario en vb.net. 

    De antemano gracias por su ayuda

    jueves, 17 de noviembre de 2016 17:59

Respuestas

  • Lo que quiero hacer es un funcion generica que me cuente los items que existan en un listview dentro de un formulario dandole como parametros el nombre del formulario y el nombre del listview. Esto es por que lo voy a usar varias veces y no quiero repetir el codigo varias veces. Es decir quiero un funcion que me permita obtener la cantidad de items registrados en cualquier listview de cualquier formulario en la aplicacion, obviamente dando los nombres de ambos como parametros

    Hola hector barajas,

    Podrías hacer algo como :

    Public Function getCountRowsListView(ByVal frmName As String, ByVal lvName As String) As Integer
    
            Dim form = Application.OpenForms().Item(frmName)
    
            If form IsNot Nothing Then
                Dim listView = TryCast(form.Controls.Item(lvName), ListView)
                If listView IsNot Nothing Then
                    Return listView.Items.Count
                End If
            End If
    
            Return 0
    
        End Function

    Y para llamarlo.

    Dim rowCount = getCountRowsListView("Form2", "ListView1")
    MessageBox.Show(rowCount.ToString())


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 17 de noviembre de 2016 19:36
  • Si es por crear la instancia puedes hacerlo así (con tu nombre de proyecto):

    String Nombre ="NombreProyecto." + "frm_compras";

    Dim T As Type = Type.GetType(Nombre, True, True)
    Dim Forma = CType(Activator.CreateInstance(T), Form)
    Forma.Show()

    jueves, 17 de noviembre de 2016 18:36

Todas las respuestas

  • Si es por crear la instancia puedes hacerlo así (con tu nombre de proyecto):

    String Nombre ="NombreProyecto." + "frm_compras";

    Dim T As Type = Type.GetType(Nombre, True, True)
    Dim Forma = CType(Activator.CreateInstance(T), Form)
    Forma.Show()

    jueves, 17 de noviembre de 2016 18:36
  • Hola hector barajas,

    ¿Hay alguna razón en especial para que necesites obtenerlo desde una cadena ?

    Esto es lo que necesitas ?

    Dim frm = My.Application.OpenForms.OfType(Of Form).
                  Where(Function(x) x.Name = "frm_compras").FirstOrDefault
    
    If frm IsNot Nothing Then
       frm.BackColor = Color.Red
    End If

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 17 de noviembre de 2016 18:37
  • Lo que quiero hacer es un funcion generica que me cuente los items que existan en un listview dentro de un formulario dandole como parametros el nombre del formulario y el nombre del listview. Esto es por que lo voy a usar varias veces y no quiero repetir el codigo varias veces. Es decir quiero un funcion que me permita obtener la cantidad de items registrados en cualquier listview de cualquier formulario en la aplicacion, obviamente dando los nombres de ambos como parametros
    jueves, 17 de noviembre de 2016 19:02
  • En es caso puedes obtenerla como te indica Joel o en forma directa

    Dim Forma = Application.OpenForms().Item("frm_compras")

    jueves, 17 de noviembre de 2016 19:10
  • ¿Porque no en tu función recibes como parámetro el form como tal, puede declarar la variable de ese tipo y enviarlo, dentro de tu función buscas los controles que contenga y que Name sea el de tu listview y sobre ese control haces tus validación pertinentes?, obviamente tu form ya debe estar instanciado en una variable.

    Saludos

    jueves, 17 de noviembre de 2016 19:13
  • Lo que quiero hacer es un funcion generica que me cuente los items que existan en un listview dentro de un formulario dandole como parametros el nombre del formulario y el nombre del listview. Esto es por que lo voy a usar varias veces y no quiero repetir el codigo varias veces. Es decir quiero un funcion que me permita obtener la cantidad de items registrados en cualquier listview de cualquier formulario en la aplicacion, obviamente dando los nombres de ambos como parametros

    Hola hector barajas,

    Podrías hacer algo como :

    Public Function getCountRowsListView(ByVal frmName As String, ByVal lvName As String) As Integer
    
            Dim form = Application.OpenForms().Item(frmName)
    
            If form IsNot Nothing Then
                Dim listView = TryCast(form.Controls.Item(lvName), ListView)
                If listView IsNot Nothing Then
                    Return listView.Items.Count
                End If
            End If
    
            Return 0
    
        End Function

    Y para llamarlo.

    Dim rowCount = getCountRowsListView("Form2", "ListView1")
    MessageBox.Show(rowCount.ToString())


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 17 de noviembre de 2016 19:36