Newsgroup: it.comp.lang.visual-basic
Titolo: Caricare form da una classe

Ciao,
sto cercando di scrivere una classe che mi faccia apparire un form che
abbia alcune caratteristiche ed alcuni controlli al suo interno.
Mentre per i controlli non dovrei avere problemi a crearne (se sbaglio
ditelo :-)) ) con controls.add , non riesco a creare un form.
Fino ad ora sono arrivato a:
Dichiarare una variabile come form nella sezione dichiarazioni della
classe:
Dim frmClass as Form
Poi ho tentato di fare un CreateObject (in realta' non lo so usare, ho
solo provato), ho provato ad istanziare la variabile con un set
Set frmClass = New ??? boh, mi appaiono solo i nomi di form gia' esistenti
nella mia applicazione, ma a me interessa crearne uno di nuovo, anche
perche' non deve essere dipendente dall'applicazione che sta girando.
Ho provato a cambiare hobby, ma il mio cervello fa in errore di runtime 13
- tipo non corrispondente
Possibili soluzioni, preferibilmente non concentrandosi troppo sul
tenativo 3?
Grazie... Maurizio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 perche' non deve essere dipendente dall'applicazione che sta girando.
Creati un form vuoto e fai
Set f = new MyEmptyForm
Come farai poi a gestirlo mi rimane un mistero.
Ciao 

 Come farai poi a gestirlo mi rimane un mistero.
...
'Nnamo bene :-)
Grazie e ciao... Maurizio


scusa, sono un po' tonto.. ma cos'e' che devi fare, di preciso?
quello che ho capito io? (e che mi spiega il caricamento da classe, e
"indipendente")
che devi fare una dll (progetto separato) che ti lancia un form
(contenuto nella dll, con
i suoi bottoni, immagini etc.. etc..)
giusto?
se e' cosi', dovrei avere un pezzettino di codice, da qualche parte...

Sinceramente penso di non aver capito la domanda,
non puoi inserire una form precostruita nel tuo ActiveX?
Emiliano.


 giusto?
...
Mmm... ancora DLL, ActiveX e roba del genere le lascerei stare, sto
cercando di andare avanti (e ne sto imparando, di cose), ma li ci devo
ancora arrivare.
Spero di essere riuscito a spiegarmi, faccio fede sulla vostra perspicacia
e pazienza :-))
Ciao... Maurizio


mmm... no... ancora non ho capito.
Ma non e' che invece di una classe + form, tu vuoi costruire un
usercontrol?
Te lo gestisci come un form, con tutti gli oggettini drag&droppabili,
hai le proprieta e funzioni come le classi (ok,  funzionano anche sui
form, lo so), e puoi "agganciarlo"
in qualsiasi form....

 Te lo gestisci come un form,[...]
...
Ok, provo a vedere di cosa si tratta. Se nel frattempo, pero', vi viene
un'idea... :-))))
Ciao e grazie... Maurizio


 Forse quel poco che ho letto di VB.Net mi porta fuori strada.
Ah, ma tu stai parlando di Vb.net...
Tanto non si capisce un'accidenti di quello che vuoi fare :)
Ciao 

 Tanto non si capisce un'accidenti di quello che vuoi fare :)
...
Sniff, sniff, non mi capisce nessuno!! :-))
Come posso fare a spiegarmi meglio?


al di la di .net o vb6... io non ho ancora capito qual'e' l'effetto
pratico che
vuoi ottenere.
andandoci piano piano...
tu vuoi (ipoteticamente) un bottone, su cui schiacci, e ti visualizza
un form
dove mostri un'immagine (o fai la lista di immagini etc... etc..) ?
se si, l'ambiente e' a form "sciolti", oppure un form grande in cui
visualizzi
tanti form "figli" ?

Ciao,
cerco di ripresentare il problema.
Ho un form modale con un po' di controlli, tra cui uno e' un CommandButton.
Cliccando su questo, vorrei che mi si aprisse una qualche cosa (penso ad
un form), con una  DriveListBox, una DirListBox, una FileListBox, un
controllo immagine grandicello per vedere quello che ho scelto, e magari
un po' controlli immagine piccolini per vedere l'anteprima delle immagini
presenti in quella directory; oltre a cio', un paio di bottoni che
permettano di chiudere la "cosa" appena visualizzata, e uno che, prima di
chiudere, dica al form chiamante quale e' l'immagine scelta.
Ho immaginato di mettere tutto entro una classe (cosi' le studio ancora un
po'), per non sovraffollare troppo il form originale.
Il tutto in VB6
E' cosi' brutta l'idea? 
Tornando al discorso .net (cosi' incomincio a fare confusione anche con
quello :-)) )
Se fossi stato in .net, correggetemi, la cosa sarebbe stata molto piu'
semplice visto che i form non sono altro che classi native di VB. Giusto?
Avrei quindi avuto solo la necessita' di istanziare un oggetto come form.
Ciao e grazie per la pazienza... Maurizio


vb6
secondo me, parti dall'idea sbagliata......
da quanto ho capito io, la classe ti serve solo per fare da "launcher"
del form.
Ora, l'idea di non impiastricciare il codice e' sempre bellissima....
ma...
Il form cun le dirbox lo devi cmq aggiungere e gestire nel progetto.
Quindi, di fatto, ti troveresti ad avere una classe che espone una
funzione che dice
"form.show" In piu' nel codice "d'origine", devi dimensionare una
classe.
Mentre quel "form.show", lo metti nel bottone che lancia il form, e sei
a posto: tanto
cmq, tutta la gestione delle immagini, directory, files etc.. le fai
nel form finale.
Altro discorso e', invece, se decidi di farti, che ne so, un componente
in un progetto
a parte. A quel punto, fai vedere solo un bottoncino, che
automaticamente sul click
apre il tuo form con dirbox etc...  E tutti i salti mortali che vuoi
far fare al codice, nel
progetto originale, non si vedono ne danno fastidio!
Ma sono due progetti.
Per .net
No, sarebbe stato lo stesso o quasi....

 No, sarebbe stato lo stesso o quasi....
...
Mmmm...vabbe', dopo aver studiato un 200 pagine, visto che ci stavo
capendo meno di niente, ho deciso di sospendere lo studio di net finche'
non assimilati quelli di vb6.
Ciao e grazie... Maurizio


 non assimilati quelli di vb6.
Attenzione che VB6 non è OO come .Net, ma comunque anche in VB6 le form sono 
in tutto e per tutto classi (anche se non possono essere pubbliche 
all'esterno del progetto, ma tanto tu sei su un exe).
Ciao 

 in tutto e per tutto classi 
...
Ecco, appunto.
Torniamo anche solo per un attimo a .net
Diciamo che non uso il VB studio, ma lavoro in notepad.
Posso quindi "Creare" un form senza averlo precedentemente incluso nel
progetto (che in realta' non c'e') semplicemente istanziando un oggetto
che fa riferimento alla classe Forms. Giusto (beh, anche piu' o meno,
visto che al net gli ho dato una occhiata e non di piu')?
Speravo una cosa simile si potesse fare anche in VB6
Grazie, comunque, per tutta la pazienza che ci state mettendo... Maurizio


Ok, scusa, non avevo capito tutto prima. In effetti, ora, torna la tua
domanda.
Che io sappia, in vb6 non si riesce a fare quello che dici (creare un
form a runtime)
in 
vb.net
, si ti basta aggiungere qualcosa tipo questo:
Public Class Class1
    Public Sub New()
        Dim frm As New Form
        frm.Size = New Size(100, 100)
        frm.Location = New Point(10, 10)
        frm.Visible = True
        frm.Show()
    End Sub
End Class
(tralascio problemi di modalita', dove mettere etc.. etc...)
ma la domanda, a questo punto, e':
e dove metti gli eventi e le funzioni relative al utilizzo del form?
si, addhandler e storie strane....
ma a questo punto, non e' piu' semplice ereditare la class1 da form?
secondo me, si.
E ti trovi ad avere un semplice e "banale" form..... punto di partenza.
forse ha piu' senso se vuoi farti un file di testo da compliare al
volo....
ti fai una classe che compila e ti fa spuntare fuori un form come vuoi
tu,
magari diverso ogni volta....

 che fa riferimento alla classe Forms.
E da quando?
Da qualche parte 'sto form ci deve essere.
Se non è nel tuo progetto è in una dll esterna, oppure nel framework, se 
parli di Form puro e semplice in .Net.
In VB non esiste una classe Form istanziabile, ma nulla ti vieta di metterne 
una vuota nel progetto.
Però il problema 'sta sempre lì, poi come accidenti la gestisci?
Risposta: in VB6 non puoi (a meno di bizantinismi carpiati che eviterei).
Ciao 

bellissimo il  termine "bizantinismi carpiati"....
non l'avevo mai sentito, ma esprime l'idea molto bene!

 Risposta: in VB6 non puoi (a meno di bizantinismi carpiati che eviterei).
...
LOL
Ciao e grazie... Maurizio


> Perche'? In cosa potrebbe essere la difficolta' ?
metti una form vuota. A questo punto hai un form da poter "copiare" a
runtime.
Poi, al suo interno, ci piazzi sopra tutti i componenti che vuoi, che
ne so...
una textbox per visualizzare il percorso del file.. ed un bottone che
"apre" la solita
finestrella di "apri/salva".
Come fai a dire al bottone che sul suo evento "click" deve aprire la
dialog?
Supponendo che te la cavi con addhandler, da qualche parte, la funzione
cmq
devi scrivertela.
A questo punto... non stai meno a fare cmq un form e scriverci quello
che vuoi?
..come ti hanno gia' detto, l'unica maniera, se vuoi non ingarbugliare
in questo
senso il codice, e farti un progettino a parte.

 un form, partendo da... boh, qualche cosa...
Qualcuno iniziň con della creta, e anche lě il risultato non mi pare sia
stato esaltante, ma almeno Lui sapeva da dove iniziare.
Tu vuoi fare "qualcosa" in "qualche modo" usando "qualcos'altro" ma mi pare
un po' poco come idea di partenza (e anche di arrivo).
Ciao

 un po' poco come idea di partenza (e anche di arrivo).
...
Come ti ho detto, ero un po' influenzato dal .net.
Comunque ho deciso... mi faccio il mio bel form, altri arzigogoli li
lascio a quando avro' capito un po' di piu' :-)
Ciao e grazie di tutto... Maurizio
