@md9327
dopo varie prove ho optato per il tuo primo consiglio "l'array"
ho creato una classe
' Gambas class file
STATIC PUBLIC MyForm AS Object[20]
STATIC PUBLIC FUNCTION InsForm() 'inserisce i form nell'array
DIM i AS Integer
i = 0
IF (NOT Object.IsValid(MyForm) OR IsNull(MyForm)) THEN
MyForm[0] = m1.MyNaF
ELSE
FOR EACH MyForm
IF MyForm[i] = NULL THEN
MyForm[i] = m1.MyNaF
STOP EVENT
RETURN
END IF
INC i '
NEXT
END IF
m1.MyNaF = NULL
CATCH
Message.Error(Error.Text)
END
STATIC PUBLIC FUNCTION DelForm() 'cancella i form nell'array
DIM i AS Integer
i = 0
IF (Object.IsValid(MyForm) OR NOT (IsNull(MyForm))) THEN
FOR EACH MyForm
IF MyForm[i] = m1.MyNaF THEN
MyForm[i] = NULL
END IF
INC i '
NEXT
END IF
m1.MyNaF = NULL
CATCH
Message.Error(Error.Text)
END
STATIC PUBLIC FUNCTION IcoForm() 'nasconde i form
DIM i AS Integer
i = 0
IF (NOT Object.IsValid(MyForm) OR IsNull(MyForm)) THEN
FMain.Minimized = TRUE
ELSE
FOR EACH MyForm
IF MyForm[i] <> NULL THEN
MyForm[i].hide
END IF
INC i '
NEXT
FMain.Minimized = TRUE
END IF
CATCH
Message.Error(Error.Text)
END
STATIC PUBLIC FUNCTION MaxForm() 'mostra i form
DIM i AS Integer
i = 0
IF (NOT Object.IsValid(MyForm) OR IsNull(MyForm)) THEN
FMain.Minimized = FALSE
FMain.Maximized = TRUE
ELSE
FOR EACH MyForm
IF MyForm[i] <> NULL THEN
MyForm[i].show
END IF
INC i '
NEXT
FMain.Minimized = FALSE
FMain.Maximized = TRUE
END IF
CATCH
Message.Error(Error.Text)
END
STATIC PUBLIC FUNCTION CloForm() 'prima della chiusura controlla i form
DIM ret AS Integer
DIM i AS Integer
DIM MyCoF AS Boolean
IF (NOT Object.IsValid(MyForm) OR IsNull(MyForm)) THEN
QUIT
ELSE
MyCoF = FALSE
i = 0
FOR EACH MyForm
IF MyForm[i] <> NULL THEN
IF MyForm[i].fasmod = TRUE THEN MyCoF = TRUE 'controlla i form in fase di modifica
END IF
INC i '
NEXT
IF MyCoF = FALSE THEN 'se nessun form è in fase di modifica chiude
QUIT
ELSE
i = 0
FOR EACH MyForm
IF MyForm[i] <> NULL THEN
IF MyForm[i].fasmod = TRUE THEN
IF Message.Error(m1.MyNamA & " Hai un form in fase di modifica!!", "Apri Form", "Chiudo") = 1
MyForm[i].show
STOP EVENT
RETURN
ELSE
QUIT
END IF
END IF
END IF
INC i '
NEXT
END IF
END IF
CATCH
Message.Error(Error.Text)
END
nei form
PUBLIC SUB Form_Open()
m1.MyNaF = Form1
FMdi.InsForm
END
PUBLIC SUB Form_Close()
m1.MyNaF = Form1
FMdi.delForm
ME.close
CATCH
Message.Error(Error.Text)
END
il tutto funziona, ora devo solo inserire nell'evento iconize del main.
il problema è che non riesco a trovare l'evento iconize, ho provato nel resize ma non funziona mi arriva in ritardo, e cioè quando riduco a icona non succede nulla, quando riapro il main mi nasconde le form.
io uso il main a pieno schermo e non ridimensionabile.