Frm indipendenti

martedì 19 aprile 2011 - 17.43
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio Express  |  Firefox

kawa Profilo | Newbie

Salve a tutti, avrei un problema da risolvere!!!????

Allora cercherò di spiegarmi il meglio possibile:

Mi trovo con avere un MDI il quale può aprire 2 form NON figli.
Il primo Form (Form_1) a sua volta può aprire un altro Form (Form_1_A), il quale viene aperto con il comando Form_1_A.Showdialog. A questo punto sino a quando non chiudo Form_1_A non è possibile accedere a Form_1.
Il secondo Form (Form_2) serve solo per visualizzare il contenuto di MDI.

Il problema nasce quando ho aperto Form_1 e Form_2 e apro Form_1_A, in questo caso non riesco più ad accere a Form_2 !!!!!!!!!!

Avete qualche codice al riguardo ????

kataklisma Profilo | Senior Member

>Salve a tutti, avrei un problema da risolvere!!!????

Ciao! Benvenuto nel forum!

>Il problema nasce quando ho aperto Form_1 e Form_2 e apro Form_1_A,
>in questo caso non riesco più ad accere a Form_2 !!!!!!!!!!
>
>Avete qualche codice al riguardo ????

Beh, è tutto normale : se apri un form in modalità "Modale" (ovvero con ShowDialog) gli altri form non accetteranno input utente finchè l'istanza del form modale non viene chiusa.

Detto questo ti consiglio di aprire l'istanza di Form_1_A con il metodo Show (e non ShowDialog) e di implementare una logica di interfaccia in Form_1 che non permette all'utente l'input finchè l'istanza di Form_1_A non viene chiusa.

Questa è l'unica soluzione, ma devo dirti la verità, cosi di primo acchito non mi sembra un'interfaccia utente molto "intuitiva" anzi, la vedo piuttosto "dispersiva"; se hai un form MDI che necessità hai di far vedere in Form_2 i dati di tale form?Non è meglio utilizzare un form figlio? Hai mai pensato all'uso di un'interfaccia a Tab piuttosto che MDI?

Ciao!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

kawa Profilo | Newbie

Ciao kataklisma , la rottura è che con il metodo show all apertura della finestra lo script non passa ne dal MyBase.Load e ne da Me.Shown .. quindi non rieso a caricare i valori durante l'apertura.
Dovrei studiare il modo di richiamare una Sub che carichi le impostazioni del Form e poi dare lo Show alla finestra....


Grazie in maniera..................

kataklisma Profilo | Senior Member

>Ciao kataklisma , la rottura è che con il metodo show all apertura
>della finestra lo script non passa ne dal MyBase.Load e ne da
>Me.Shown .. quindi non rieso a caricare i valori durante l'apertura.
>Dovrei studiare il modo di richiamare una Sub che carichi le
>impostazioni del Form e poi dare lo Show alla finestra....

Ti sbagli, gli eventi Load e Shown vengono sottoscritti....e poi, comuque, esistono i costruttori per effettuare determinate istruzioni eh....!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

kawa Profilo | Newbie

tipo????

kataklisma Profilo | Senior Member

> tipo????

A cosa ti riferisci scusa...?

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

kawa Profilo | Newbie

cosa sono i costruttori????? puoi farmi un piccolo esempio ... !!!!

Per il discorso del Mybase.Load viene eseguito al primo richiamo dopo non viene più richiamato (usanto il metodo frm.show) mentre con il metodo frm.showdialog l'evento Load del frm viene "sempre" eseguito.

HI!!!

kataklisma Profilo | Senior Member

> cosa sono i costruttori????? puoi farmi un piccolo esempio
>... !!!!

Non smetterò mai di dire su questo forum che prima di scrivere una sola riga di codice bisogna studiare ALMENO i principi e i fondamenti principali della programmazione orientata agli oggetti.

Non si può metter mano al motore di una macchina senza conoscere come fare!

Il costruttore ti permette di eseguire una determinata porzione di codice ogni qual volta viene istanziato un nuovo oggetto con la parola chiave "new".

Se per esempio creiamo un nuovo form di nome Form2 posso utilizzare il seguente codice per dichiararne il costruttore "base" e per effettuare le varie operazioni (in questo caso una semplicissima MsgBox) :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Quindi con "Public Sub New()" non ho fatto altro che creare un costruttore parameterless (senza parametri), questa subroutine verra eseguita se ad esempio nel Form1 vado a creare una nuova istanza di Form2 :

Dim frm = New Form2()

Quindi, prima ancora dell'evento Load viene eseguito il costruttore della classe.

In genere i costruttori non parameterless vengono utilizzati per importare informazioni nella nuova classe :

Public Sub New(ByVal TestoDaVisualizzare As String) InitializeComponent() MsgBox(TestoDaVisualizzare) End Sub

richiamabile con :

Dim frm = New Form2("Prova Testo da visualizzare in MsgBox")


Un consiglio personale e spassionato : se ti interessa seriamente la programmazione, nello specifico quella ad oggetti, ti conviene studiare altrimenti non si va da nessuna parte.

Il forum è utilissimo per dare consigli e risolvere problematiche generiche e specifiche del linguaggio e del dominio del problema ma determinati argomenti devono essere oggetto di studio profondo al di fuori del forum

>Per il discorso del Mybase.Load viene eseguito al primo richiamo
>dopo non viene più richiamato (usanto il metodo frm.show) mentre
>con il metodo frm.showdialog l'evento Load del frm viene "sempre"
>eseguito.

Ripeto, sbagli! Posta il codice che esegui, c'è qualcosa che non va.



------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

kawa Profilo | Newbie

.... che spettacolo (WLF) .... grazie della delucidazione, sono messo un pò male a livello di terminologia.

Ora posso dirti che: Form2 ha una serire di inizializzazioni le quali le faccio solo una volta, aprendo il Form come dici tu mi ritrovo a dover inizializzare tutte le volte questi valori.
Oggi poi ho notato che aprendo il Form con form.show nel momento in cui chiudo il form con la x la finestra viene distrutta quindi mi ritrovo ancora a dover inizializzare tutto all'apertura successiva.

Quindi me la sono cavata richiamando una Sub al interno della Form2 in cui ho messo un me.show(MDI) e nello script di Form2.formclosing un e.cancel = true e successivamente me.hide.
In questo modo la finestra non viene distrutta nel momento in cui la chiudo con la x e ho associato Owner dell Show alla finestra MDI e ho fatto questo in successione in tutte le altre sotto finestre, cosi ho lo stesso effetto dell'istruzione From.Showdialog con a differenza la possibilita di richiamare altre finestre Form1 Form3 ecc. figli del MDI.

Chi legga questi miei messaggi deve scusarmi delle spiegazioni .... NON SONO IL MIO FORTE!!!!!!

Saluti.

P.S. Magari avere tempo di tornare a studiare ciao belli !!!!!


Dai ... questa sera ho trovato un attimo per fare un esempio... se tu fossi in grado di risolvere questa cosuccia ti sarei molto grato!!!!

Allora:

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form2.Show(Me)
End Sub

End Class

Public Class Form2

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Inizializza = False Then
Inizializza = True
For i = 0 To 10 : ComboBox1.Items.Add(i) : Next
End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide()
End Sub

End Class

Module Module1
Public Inizializza As Boolean = False
End Module

Potrai notare che nel momento in cui chiudo la finestra con la X nella Combo alla successiva visualizzazione non contiene nulla ...... che tristezza ....

Ancora saluti!!!!!!
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5