Sería bueno que siguieras las convenciones de nombres de gambas. Por ejemplo, los nombres de los formularios llevan la primer letra en mayúsculas y como prefijo la letra efe mayúscula: "FIva".
¿Cuál es la necesidad de crear tus formularios a partir de un archivo XML? No es algo usual, deberías tener una muy buena razón para hacerlo.
De lo que explicas entiendo que deberías tener los botones Nuevo (alta), Editar, Ver (lectura), entonces no hay necesidad de una función como la que describías ya que cada botón abrirá el mismo formulario. Lo que necesitas hacer es crear una propiedad Modo en FIva... mejor te muestro el código:
'FIva
PUBLIC CONST nuevo AS Byte = 0
PUBLIC CONST editar AS Byte = 1
PUBLIC CONST ver AS Byte = 2
PRIVATE $mode AS Byte = 2
PROPERTY Mode AS Byte
'Esquematicé las funciones de Alta, Modificación y Visualización del formulario mediante 3 frames diferentes. Es sólo un ejemplo.
FUNCTION Mode_Read() AS Byte
RETURN $mode
END
SUB Mode_Write(Value AS Byte)
modo(Value)
END
PRIVATE SUB modo(mode AS Byte)
IF mode >= nuevo AND IF mode <= ver THEN $mode = mode
deshabilitarTodo
SELECT CASE $mode
CASE nuevo
FrameNuevo.Enabled = TRUE
CASE editar
FrameEditar.Enabled = TRUE
CASE ver
FrameVer.Enabled = TRUE
END SELECT
END
PRIVATE SUB deshabilitarTodo()
FrameNuevo.Enabled = FALSE
FrameEditar.Enabled = FALSE
FrameVer.Enabled = FALSE
END
PUBLIC CONST nuevo AS Byte = 0
PUBLIC CONST editar AS Byte = 1
PUBLIC CONST ver AS Byte = 2
PRIVATE $mode AS Byte = 2
PROPERTY Mode AS Byte
'Esquematicé las funciones de Alta, Modificación y Visualización del formulario mediante 3 frames diferentes. Es sólo un ejemplo.
FUNCTION Mode_Read() AS Byte
RETURN $mode
END
SUB Mode_Write(Value AS Byte)
modo(Value)
END
PRIVATE SUB modo(mode AS Byte)
IF mode >= nuevo AND IF mode <= ver THEN $mode = mode
deshabilitarTodo
SELECT CASE $mode
CASE nuevo
FrameNuevo.Enabled = TRUE
CASE editar
FrameEditar.Enabled = TRUE
CASE ver
FrameVer.Enabled = TRUE
END SELECT
END
PRIVATE SUB deshabilitarTodo()
FrameNuevo.Enabled = FALSE
FrameEditar.Enabled = FALSE
FrameVer.Enabled = FALSE
END