Acceder a controles de otro formulario

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:28 PM por David Miralpeix

En este ejemplo veremos como acceder al valor de un control de otro formulario que esté abierto.


Es necesario si necesitamos conocer el valor de algún campo o grid de las ventanas que tengamos abiertas.


Necesitamos conocer tanto el nombre del formulario como la librería de la que proviene.


Código VB6:

    Set lCol = gcn.obj.DameForms("Ahora<Libreria>")
    For i=0 To lCol.count -1
      ' lCol(i).name nos devuelve el nombre del formulario
      If lCol(i).name = "<Nombre Formulario>" Then
          lUbic = lCol(i).Controls("<Nombre Control a Recuperar>").Text
          Exit For
      End If  
    Next
    Set lCol = Nothing


Ejemplo. Refresco la grid de materiales del parte al cerrar un formulario con Botonera.

Sub Initialize()
  gForm.Controls("Botonera").ActivarScripts = True
End Sub

Sub Botonera_BeforeExecute(aBotonera, aBoton, aCancel)

 If aboton.name = "botCerrar" Then
  gcn.obj.showmsgbox "Antes:" & aboton.name  
    Set lCol = gcn.obj.DameForms("AhoraPartes")

    For i=0 To lCol.count -1
      ' lCol(i).name nos devuelve el nombre del formulario
      If lCol(i).name = "frmParte" Then
          'gcn.obj.showmsgbox  lCol(i).Controls("Descrip").Text 'Devuelve el valor del campo Descrip del parte.
          'GRID DE MATERIALES
          Set lGrid =  lCol(i).Controls("grdLineasMat") 
          If lGrid Is Nothing Then 
             gcn.obj.showmsgbox "No existe"            
          Else                         
            'inserto linea por bbdd.
            lGrid.refrescar                
          End If
          
          Exit For
      End If  
    Next
 End If     
End Sub


Código C#:

IVB6Collection<IForm> lCol = gCn.Obj.OnDameForms("<AhoraLibreria>");
foreach (IForm form in lCol)
{
    if (form.Name == "<Nombre Formulario>")
    {
        // Recuperación del control
        break;
    }
}

Ejemplo. Refresco la grid de materiales del parte al cerrar un formulario con Botonera.

using AhoraCl;
using AhoraCore;
using AhoraOCX;
using AhoraUtil;

namespace AhoraScriptsPantalla
{
  public class AhoraCl_frmClientes : AhoraOCX.AhoraBaseScript
  {

    public void Show()
    {
      (gForm.Controls["Botonera"] as ICntBotonera).ActivarScripts = true;
    }

    public void Botonera_BeforeExecute(ICntBotonera aBotonera, IAhoraTool aBoton, ref Valor aCancel)
    {
      if (aBoton.Name == "botCerrar")
      {
        IVB6Collection<IForm> lCol = gCn.Obj.OnDameForms("AhoraPartes");

        foreach (IForm form in lCol)
        {
          if (form.Name == "frmParte")
          {
            ICntGridUsuario lGrid = (ICntGridUsuario)form.Controls["grdLineasMat"];
            if (lGrid == null)
            {
              gCn.Obj.ShowMsgBox("No existe");
            }
            else
            {
              lGrid.Refrescar();
                            gCn.Obj.ShowMsgBox("Refrescado grid grdLineasMat");
                        }
            break;
          }
        }
                
            }
    }

  }
}


¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo