[VB.NET] Form Padre e Form Figlie

sabato 24 ottobre 2009 - 20.46

cypher Profilo | Junior Member

ho creato una form con un semplice menu a discesa e vorrei che ogni qual volta si cliccasse su una opzione del menu il form di riferimento si aprisse all'interno del form principale (pero senza che siano presenti i pulsanti chiudi, ripristina,.....) o meglio che il form principale si "aggiornasse" mostrando il contenuto del form che si riferisce all'opzione selezionata. come si fa???

grazie per il supporto

freeteo Profilo | Guru

Ciao,
prova a mettere nelle form la proprietà "Toolbox=false" in modo che non compaiano più i bottoni classici delle form in alto a destra per chiudere massimizzare etc...
Inoltre imposta anche la proprietà "WindowState = FormWindowState.Maximized" in modo che vengano aperte tutte grandi ogni volta.
Se non ho capito male, è questo che vuoi ottenere...
Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

cypher Profilo | Junior Member

sisi molti punti della mia domanda gli hai risolti.... l'unico a cui non hai risposto è come faccio a fare comparire la form nuova un quella gia esistente (è una questione di praticita da parte dell'utente per evitare di fare aprire e chiudere ogni form relativa ad ogni opzione)

freeteo Profilo | Guru

Ciao,
intendi dentro allo spazio della MDI? Per questo ti basta impostare la proprietà "MdiParent = this" dove "this" è la tua MDI ovviamente.
Se intendi che la maschera non deve essere aggiunta nuova, ma mostrata se è già stata aperta in precedenza, allora ti basta fare una ricerca nelle MdiChild e se la trovi, la attivi, un codice di questo tipo:
foreach (Form f in this.MdiChildren) { if (f.GetType() == form.GetType()) { f.Activate(); break; } }
Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

cypher Profilo | Junior Member

ok appena torno a casa provo e ti faccio sapere

edit: ok ho provato col seguente codice messo sull'evento click dell'opzione del menu

Dim Form2 As New Form2 Form2.MdiParent = Me Form2.Show()

dove form2 è una form che ho creato.

solo che mi da la seguende eccezione
Il form specificato come MdiParent per questo form non è un MdiContainer. Nome parametro: value

come risolvo???

cypher Profilo | Junior Member

penso di avere risolto mettendo nella load della form 1 me.ismdicontainer=true.

vi sembra una soluzione accettabile??

edit: il codice che mi hai suggerito per vedere se una form è gia aperta o meno dove dovrei metterlo???

freeteo Profilo | Guru

>penso di avere risolto mettendo nella load della form 1 me.ismdicontainer=true.
>vi sembra una soluzione accettabile??
si, ma di solito quella proprietà si setta da designer, dato che solitamente decidi prima (dell'esecuzione) quale maschera (solitamente una) sarà il tuo "contenitore" delle altre che l'utente userà dell'applicazione...


>edit: il codice che mi hai suggerito per vedere se una form è
>gia aperta o meno dove dovrei metterlo???
sul pulsante che apre quella form, ti fai un metodo che richiami per aprire la form...io farei qualcosa tipo:
... ApriForm(new Form2()); ... private void ApriForm(Form form) { Cursor.Current = Cursors.WaitCursor; foreach (Form f in this.MdiChildren) { if (f.GetType() == form.GetType()) { form = f; break; } } form.MdiParent = this; form.WindowState = FormWindowState.Maximized; form.Show(); Cursor.Current = Cursors.Default; }
Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

alexmed Profilo | Guru

Ciao freeteo
Mi permetto di postare il codice in Vb.Net (convertito con in semi-automatico):


Private Sub ApriForm(ByVal form As Form) Cursor.Current = Cursors.WaitCursor For Each f As Form In Me.MdiChildren If f.GetType Is form.GetType Then form = f Exit For End If Next form.MdiParent = Me form.WindowState = FormWindowState.Maximized form.Show() Cursor.Current = Cursors.Default End Sub

Perchè dal titolo ho visto che cypher dovrebbe programmare in VB. Dagli un'occhiata se è tutto a posto.
Ciao

alexmed

freeteo Profilo | Guru

Ciao,
si fatto bene, io posto sempre il C# visto che lo uso quotidianamente ma il passaggio dall'uno all'altro è abbastanza banale, ad esempio usando: http://www.carlosag.net/Tools/CodeTranslator/

e cmq prima o poi capita nella programmazione .net di dover passare da uno all'altro, quindi meglio abituarsi...o cmq mettere un traduttore come bookmark
Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

cypher Profilo | Junior Member

se io volessi usare quella funzione per tutte le form dove posso metterla??? perche a metterla in una class di una form la posso utilizzare solo in quella form

edit: inoltre il codice mi apre cmq una nuova forma anche se è attivata. qualche consilgio?
edit2: colpa mia non avevo tolto il form.show() dopo la chiamata della funzione

freeteo Profilo | Guru

>se io volessi usare quella funzione per tutte le form dove posso
>metterla??? perche a metterla in una class di una form la posso
>utilizzare solo in quella form
si infatti dovresti metterla nella tua MDIParent, dove presumo tu abbia dei menù per aprire le varie form...non hai un punto dove l'utente preme ed apre la form che gli interessa?
Se poi devi aprirla da un'altra form, ti basta dichiarla public e richiamare sempre la sua MDIParent, castandola alla form che vuoi, e invocare sempre quella.
Ciao.

Matteo Raumer
[MCAD, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

cypher Profilo | Junior Member

ok grazie mille risolto

jekisi Profilo | Senior Member

Salve, ma una cosa molto semplice sarebbe un' altra:
Tu hai il form (chiamato form1), e form2 (chiamato anchesso form2).
Se ad esempio sul form1 metti un "BUTTON" per passare al form2 quando lo clicchi in esecuzione, basta scrivere nel codice del BUTTON, nell' evento Click:
Form2.show

oppure

Form2.show 1

La differenza sta solo in un fatto:
Se fai . Show, si apre Form2, ma se chicchi sul form1, la form1 ti ritorna in primo piano, se fai .Show 1 no.

Spero di essere stato chiaro.


Distinti Saluti Fabio Messina

cypher Profilo | Junior Member

risolto grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5