Utilizzo di oggetti del form principale da parte di un form secondario...

mercoledì 01 agosto 2007 - 13.17

LLL Profilo | Newbie

Ciao a tutti,
sono nuova del forum, nonché di VB.net...

Vi chiedo aiuto su un programmino che sto scrivendo: non riesco ad utilizzare da un form secondario (Form2) gli oggetti del form principale (Form1), mentre riesco tranquillamente a fare il contrario.

Nel Form1 ho messo la seguente dichiarazione:
Dim FormSecondario as New Form2
E nell'evento associato al click di un bottone del form1:
FormSecondario.Show()

Nel Form2 ho provato a fare qualcosa del tipo:
Dim FormPrinc as Form1
Al click di un bottone del Form2 vorrei incrementare una ProgressBar del Form1:
Form1.ProgressBar1.increment(1)

Il programma va in errore su questa riga e l'errore che mi restituisce è: "Riferimento di oggetto non impostato su un'istanza di oggetto".
Nella dichiarazione di FormPrinc del resto non posso mettere "new" (Dim FormPrinc as New Form1), altrimenti il programma va in errore subito sulla riga mybase.new() della codice generato dalla progettazione di windows form (eccezione non gestita di tipo"SystemStackOverflowException").

Potete darmi una mano?
Ciao e grazie,
LLL



Timbro Profilo | Newbie

Ciao... nel codice del Form2.vb devi modificare il metodo New passandogli il Form1. cosi'...

Public Class Form2

Public Sub New(ByVal frm As Form1)


End Sub
End Class


poi nel codice del form1 scriverai :

Dim FormSecondario As New Form2(Me)
FormSecondario.Show()

cosi nel Form2 avrai accesso a tutti gli oggetti della Form1..

LLL Profilo | Newbie

Ti ringrazio per la risposta rapidissima, che pero' non ha risolto il mio problema (o forse non ho capito bene cosa dovevo fare?).
Aggiungendo la Public Sub che mi hai detto nel codice del Form2, i comandi del Form1 rimangono attivi per l'utente (cosa che in realtà non mi serve).
Però nel codice della Form2 non riesco comunque a chiamare gli oggetti del Form1 (ad es. incrementare al click di un bottone del Form2 una ProgressBar del Form1, che era quello che tentavo di fare).
Inoltre in questo modo -non o capito bene perchè- il Form2 che si apre è un form vuoto e non quello che ho fatto io...

Ho sbagliato qualcosa io o non mi ero spiegata bene?
In entrambi i casi vi chiedo un po' di pazienza: sono proprio alle prime armi...

LLL

Timbro Profilo | Newbie

beh poi devi assegnare ad una variabile locale il form1 che hai passato al Form2 ...e il codice sarà questo..

Private m_frmForm1 As Form1 ' dichiarazione variabile locale

Public Sub New(ByVal frm As Form1)


m_frmForm1 = frm 'assegnamento form1 a variabile locale

End Sub

'codice che alla pressione del button fa incrementare la progressbar del form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

m_frmForm1.ProgressBar1.Increment(1)

End Sub


funziona ora?

LukeProgrammer Profilo | Newbie

Io ho provato a fare così:

Form1:

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

Form2:

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

E funzion, la progress bar si incrementa in modo corretto senza dare errori.
Prova e dimmi se va.

Ciao
***********************************
LukeProgrammer

alextyx Profilo | Expert

Guarad se può esserti di aiuto questo minitutorial:
http://forum.masterdrive.it/visual-basic-net-36/accedere-controlli-form-form-diverso-17291/
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