Ciao andy!
Come per picav, il discorso è perchè ancora non vi è ben chiara una cosa... leggete!!!
Scherzo, ma sono anche serio... il tuo problema è che Form accetta già di suo un parametro opzionale, ovvero un oggetto, un container.
Mi spiego meglio...
Considera la Form una specie di Panel, e lo è davvero, che può essere inserita in un'altro contenitore. La Form stessa è un contenitore, ma in ogni caso è derivata dall'oggetto Window, da cui deriva proprio questo parametro opzionale.
Dato che è opzionale, se non lo passi nella creazione della Form, viene considerata NULL, ma comunque è come se glielo avessi passato.
Se tu crei una Form, su cui definisci un tuo parametro, questo si aggiunge a quello esistente e, per la logica implementata in Gambas, la sequenza con cui devi passare i parametri è descritta nella documentazione, ovvero devi prima iniziare con i parametri della classe derivata più bassa (la tua), seguiti dai parametri della classe superiore, e così via.
Ad ogni modo, il mio discorso sicuramente vi avrà portato fuori strada, perchè nel tuo caso specifico, il parametro che tu passi alla tua Form, in teoria deve essere letto dalla "tua" Form, e non dalla classe superiore (la Window, tanto per intenderci...).
Quello che devi verificare, è che la "tua" Form, abbia il metodo _new(), con il "tuo" parametro. Se questo non c'è, è inutile che glielo passi, perchè se lo prenderà la classe superiore, che si aspetta invece un tipo di dato diverso, è quindi ti dà errore.
Si è fatto un pò tardi, e sono pure abbastanza malmesso (con questo tempaccio...), quindi spero che abbia scritto cose comprensibili...
Usare variabili globali è sicuramente fattibile, e infatti funziona, ma funziona fichè hai un piccolo progetto, che ti permette di tener sotto controllo tutte le fasi logiche. Ammettiamo per caso, di avere un grosso progetto, in cui sono definiti un massiccio numero di componenti (oggetti, moduli, e via dicendo), e tutti si alimentano con i dati globali, e per necessità questi dati devono poter essere manipolati, ogni classe può, in definitiva, aggire su questi, ignaro di quello che stanno facendo gli altri. Metti conto dei processi non sequenziali, che lavorano in modo asincrono... coem gestisci le eventuali e possibilissime sovrascritture? Come riesci a capire se il dato che ti aspetti, non sia nel frattempo stato modificato da un altro processo?
Il passaggio di dati, attraverso le varie funzioni che compongono un programma, non è logica uscita fuori con la programmazione ad oggetti, ma per l'esigenza di avere il maggior controllo possibile sulle informazioni veicolate, senza interferenze.
Certo, avere un'area pubblica, in cui posizionare i nostri dati, rende la vita molto più semplice. Ma questo solo apparentemente, e solo inizialmente. Quando ci si accorge dei problemi che poi questo comporta, il discorso assume un'aspetto diverso.
Quello che infine voglio dire, è che tutti inizialmente compiono questo errore di valutazione, ci siamo passati tutti, ma questo è dipeso solo dalla nostra scarsa conoscenza della materia. Come hai anche tu sottolineato, andy, non avendo capito alcuni concetti, ovviamente hai scelto la strada apparentemente più alla portata, il che mi pare anche normale.
La programmazione si basa sull'esperienza, ma questa bisogna farla provando e riprovando, chiedendo lumi, e cercando di capire il perchè e il percome una cosa debba funzionare in un modo piuttosto che in un'altro, quali strumenti ho a disposizione, provare ad implementarli, e via dicendo. La programmazione NON è una scienza esatta...
Scusate, mi sono dilungato un pò troppo...