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;
          }
        }
                
            }
    }

  }
}