Autore Topic: [risolto]Inserire form in un Array  (Letto 1507 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[risolto]Inserire form in un Array
« il: 07 Aprile 2012, 22:59:21 »
Ciao raga
era da parecchio che non usavo gambas e mi sono arrugginito, poi con il 3 le cose sono peggiorate.
Devo inserire i Form in un Array ma non riesco a capire dove toppo.

« Ultima modifica: 08 Aprile 2012, 22:31:33 da dex »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #1 il: 08 Aprile 2012, 00:11:52 »
... non hai dichiarato, né istanziato la classe FMid nella classe principale FMain.
Poi credo si debbano togliere tutte quelle dichiarazioni "Static"...
...forse dovresti anche istanziare il modello dei Form nella classe FMdi...
...credo anche mettere Public MyForm As New Object[]...  :-\
...MyForm.add = ...non va bene...




Ho fatto una prova da me, ma non so se è proprio quello che vuoi ottenere tu. Creo un array (che può teoricamente anche essere illimitato) di Form, e poi li mostro.

In FMain.Class:
Codice: gambas [Seleziona]

' dichiaro la classe secondaria
Public seconda As CSeconda


Public Sub Form_Open()

' istanzio la classe secondaria
   seconda = New CSeconda As "seconda"

End


Public Sub Button1_Click()

' vado a creare e riempire l'array:
' ogni clic è un Form in più a disposizione:
    seconda.creaform()

End



Public Sub Button2_Click()

' mostro i Form dell'array uno ad uno ad ogni clic:
    seconda.verifica()

End


Public Sub  Button3_Click()

' poi sadicamente li distruggo tutti, tranne il form principale:
    seconda.formDelendaSunt()

End



Nella classe secondaria CSeconda.Class:
Codice: gambas [Seleziona]

Private obja As New Object[]
Private k As Integer
Private j As Byte

Public Sub creaform()
  
  Dim fo As Form
  
' istanzio un Form:
    fo = New Form As "fo"
  
' lo aggiungo ad un elemento dell'array:
    obja.Add(fo)
  
End


Public Sub verifica()
  
  Dim box As New Form

' evito di superare il numero di elementi dell'array:
  If j > obja.max Then Return

  k = k + 30

  box = obja[j]
  
' vado a mostrare di fatto un form:
  With box
    .W = 150
    .H = 150
    .X = k
    .Y = k
    .Show
    .TopOnly = True
  End With
  
  Inc j
    
End


Public Sub formDelendaSunt()
  
  Dim formelle As Form

' i form creati vengono distrutti immediatamente:
    For Each formelle In obja
       formelle.Close
    Next
  
   Print "Form secondari tutti kaput ! "

End

« Ultima modifica: 08 Aprile 2012, 16:46:40 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #2 il: 08 Aprile 2012, 01:20:11 »
... non hai dichiarato, né istanziato la classe FMid nella classe principale FMain.
Poi credo si debbano togliere tutte quelle dichiarazioni "Static"...
...forse dovresti anche istanziare il modello dei Form nella classe FMdi...
...credo anche mettere Public MyForm As New Object[]...  :-\
...MyForm.add = ...non va bene...

ho provato a togliere static ma va in errore
se .add non và bene, come faccio a far caricare l'array?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #3 il: 08 Aprile 2012, 01:28:35 »
ho provato a togliere static ma va in errore
..ma... io l'ho dovuto togliere dovunque, se no avevo errore.


se .add non và bene, come faccio a far caricare l'array?
Add va bene, ma non con il segno =
Guarda l'esperimento che ho fatto sopra. In particolare nel codice della classe secondaria c'è un esempio con add(...)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #4 il: 08 Aprile 2012, 01:39:28 »
ho provato a togliere static ma va in errore
..ma... io l'ho dovuto togliere dovunque, se no avevo errore.


se .add non và bene, come faccio a far caricare l'array?
Add va bene, ma non con il segno =
Guarda l'esperimento che ho fatto sopra. In particolare nel codice della classe secondaria c'è un esempio con add(...)

strano = ? mi sara sfuggito.

non riesco a far funzionare il tuo esempio, in questo punto non ho capito seconda di cosa si tratta.
Citazione
Public Sub Form_Open()  
  
' istanzio la classe secodaria  
  seconda = New CSeconda As "seconda"  
  
End  

in pratica io apro dei form (non creati da codice) con show e man mano che li apro li dovrei caricare nell'array.

Edit: avevi ragione, nel copiare il codice ho lasciato =.
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.
« Ultima modifica: 08 Aprile 2012, 01:45:12 da dex »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #5 il: 08 Aprile 2012, 01:45:06 »

non riesco a far funzionare il tuo esempio, in questo punto non ho capito seconda di cosa si tratta.

Perdonami, avevo cambiato delle cose, ed ora ho aggiustato il codice qui nel forum. Riprova a copiarlo e a farlo funzionare.
Ah, ricordati di porre come "Public" nelle Opzioni del programma i Controlli del Form e pure (ad abundatiam) i simboli dei moduli.



in questo punto non ho capito seconda di cosa si tratta.
E' una classe secondaria (oltre a quella principale FMain).
L'interfaccia per scrivervi il codice la crei nelle modalità consuete in alto a sinistra, io l'ho chiamata CSeconda. Poi la dichiari ed istanzi in FMain, come da codice sopra.
« Ultima modifica: 08 Aprile 2012, 01:57:19 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #6 il: 08 Aprile 2012, 01:49:46 »
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.

In Form1 io ho cambiato così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  FMain.mdi.MyNaF = Form1

  FMain.mdi.InsForm()
    
End


Tieni conto che quel nome "mdi" è il nome che ho dato alla classe FMdi.Class all'atto della sua istanziazione in FMain:
Codice: [Seleziona]
Public mdi As FMdi


Public Sub Form_Open()

  mdi = New FMdi As "mdi"

End
« Ultima modifica: 08 Aprile 2012, 01:52:47 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #7 il: 08 Aprile 2012, 01:59:15 »
Nelle varie prove ho anche tolto static, ma in form1 quando tento di fra caricare l'array mi dice errore: non static.

In Form1 io ho cambiato così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  FMain.mdi.MyNaF = Form1

  FMain.mdi.InsForm()
    
End


Tieni conto che quel nome "mdi" è il nome che ho dato alla classe FMdi.Class all'atto della sua istanziazione in FMain:
Codice: [Seleziona]
Public mdi As FMdi


Public Sub Form_Open()

  mdi = New FMdi As "mdi"

End

provato a fare le correzioni ma va sempre in errore.


Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #8 il: 08 Aprile 2012, 02:04:10 »
Ho provato il codice che hai postato, funziona, carica il form nell'array, solo che tu crei un form da codice, come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #9 il: 08 Aprile 2012, 02:07:53 »
...come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?
...scusami, ma non ho capito bene  :-\ quello che vuoi fare. Puoi spiegarti meglio, più in dettaglio ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #10 il: 08 Aprile 2012, 02:18:47 »
...come si fa nel mio caso che devo solo aprire un form e caricarlo nell'array?
...scusami, ma non ho capito bene  :-\ quello che vuoi fare. Puoi spiegarti meglio, più in dettaglio ?

Be io ho il main (Fmain) e tanti form gia creati tipo:  clienti, personale, magazzino ecc.

Quando dal main apro il form clienti nell'array devo caricare clienti, poi quando apro altri form si devono aggiungere nell'array.
alla fine quando li ho aperti tutti nell'array devo avere:

indice  form
0        clienti
1        personale
2        magazzino

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #11 il: 08 Aprile 2012, 02:26:17 »

provato a fare le correzioni ma va sempre in errore.


Allora.. nella classe secondaria FMdi.class aggiungi la parola New qui, così:

Public MyForm As New Object[]
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #12 il: 08 Aprile 2012, 02:31:53 »

provato a fare le correzioni ma va sempre in errore.


Allora.. nella classe secondaria FMdi.class aggiungi la parola New qui, così:

Public MyForm As New Object[]

Vuott perdonami se approfitto della tua pazienza sorpatutto stasera che è festa.
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

Su gambas 2 avevo realizzato un piccolo programma per getire dei form tipo MDI, ora lo volevo usare su gambas 3 e sono non riesco ad uscirne.
ti allego il progetto fatto con gambas 2

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.359
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #13 il: 08 Aprile 2012, 02:36:59 »
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

E' strano, a me non dà errore solo se aggiungo New.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Inserire form in un Array
« Risposta #14 il: 08 Aprile 2012, 02:40:14 »
avevo già provato ad aggiungere New, non entra nella routine per caricare l'array.

E' strano, a me non dà errore solo se aggiungo New.
esatto con new non da errore, ma non entra nel codice.

in FMdi dopp
Citazione
If (Not Object.IsValid(MyForm) Or IsNull(MyForm)) Then

prova a mettere un print