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 = NothingEjemplo. 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 SubCó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;
}
}
}
}
}
}