Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Fare parlare due form
martedì 10 aprile 2007 - 11.20
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mar 10 apr 2007 - 11:20
da form1 apro form2:
Dim form2 As New form2
form2 .Owner = Me
form2 .Show()
in form2 faccio una riverca con dei controlli....
una volta sezionato cio' che devo da form2 al click di un bottone
devo fare riempire due textbox di form1....
inizio click bottone form2
textbox1 di form1 = "mio testo"
textbox1 di form1 = "mio testo"
fine click bottone form2
come faccio ad accedere ai controlli di form1???????
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 10 apr 2007 - 12:13
Ho giusto il link che fa per te!
http://forum.masterdrive.it/showthread.php?t=17291
Mi farebbe piacere che tu mi comunicassi anche le tue impressioni su quella paginetta, in modo da rendere più chiari i punti che già non lo sono abbastanza.
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mar 10 apr 2007 - 12:51
intanto grazie per la risposta
ma l'esempio che riporti permette di accedere alle propieta' dell'oggetto FORMCHEMIHAAPERTO...
in questo modo io non posso accedere hai controlli presenti nel form chiamante, posso solo accedere alle propieta' di FORMCHEMIHAAPERTO e non a
FORMCHEMIHAAPERTO.textboxchedevoriempire.text="ASTON MARTIN"
io devo potere rivalorizzare alcuni controlli contenuti nel padre.....
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 10 apr 2007 - 14:20
Hai ragione. Sembra incredibile quanto non si vedono le cose finchè non si fanno testare a terzi!
Ho apportato le opportune precisazioni. Comunque la soluzione è dichiarare FormCheMiHaAperto o come la vuoi chiamare (anche il classico "pippo" va benissimo), del tipo adatto, cioè Form1. Grazie per il tuo contributo.
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mar 10 apr 2007 - 14:55
è verissimo!!!!
sta' di fatto che comuque a te occore una nuova istanza del form..... per cui perderesti tutti i parametri che gia' vi hai settato....
sub click botton form1
Dim form2 As New form2
form2.Owner = Me.FindForm
form2.Show()
fine sub
in form2 carico un dataset e lo associo a un DGV al
sub doppio click sul DGV
Private Sub DGV_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGV.DoubleClick
Dim AAAA As String = DGV.DataSource.rows(DGV.CurrentRow.Index).item(0)
Dim BBBB As String = DGV.DataSource.rows(DGV.CurrentRow.Index).item(1)
Dim CCCC As String = DGV.DataSource.rows(DGV.CurrentRow.Index).item(2)
******* A QUESTO PUNTO ARRIVANO I PROBLEMI ******
SE SCRIVO
Me.Owner.Text = "ciao "
NEL FORM CHE CHIAMA FORM2 IL TEXT DIVENTA CIAO e TUTTO E' OK....
il mio problema è:
come faccio ad accedere
ai controlli di Me.Owner??????
Me.Owner.Controls(textbox1).text=AAAA
Me.Owner.Controls(textbox2).text=BBBB
Me.Owner.Controls(textbox3).text=CCCC
Me.Dispose()
Me.Close()
Me.Owner.refresh()
in questo modo catturo un'eccezione....
come si fa ad accere a textbox1,2,3 del form chiamante???
***********************************************
End Sub
GRAZIE 1000 E SCUSATEMI
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 10 apr 2007 - 15:09
Abbi pazienza, non ho capito di quale form mi occorre una nuova istanza.
Di Form2, no, se ce l'ho già istanziato, al limite posso dargli Hide o Show, per farlo sparire e riapparire. L'importante è che mi ricordi di passargli il riferimento prima di cercare di scrivere nella textbox di Form1. La variabile che riceve il riferimento a Form1, cioè FormCheMiHaAperto, non è seguita da un New e quindi non si crea una nuova istanza di Form1.
Per avere nell'intellisense l'elenco dei vari controlli che stanno in form1, devi, o dichiarare come nel mio esempio una variabile di tipo adatto, oppure, nel tuo caso, dovresti procedere ad una conversione di tipo:
CType(Me.Owner, Form1).TextBox1.Text = "uuuu"
Altrimenti questo oggetto owner è di tipo sconosciuto e quindi anche l'intellisense non sa che pesci pigliare !
e.disanto
Profilo
| Junior Member
84
messaggi | Data Invio:
mar 10 apr 2007 - 15:10
Scusa, presupponendo che il form chiamante si chiami form1, di seguito riporto il tuo codice:
Dim form2 As New form2
form2 .Owner = Me
form2 .Show()
da form2 hai provato a fare (ad esempio)
form1.nomecontrollo.text = "valore" ?
Ernesto di Santo
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mar 10 apr 2007 - 15:37
no.... mi scuso ma mi sono spiegato male io.....
dunque.... form1 cioe' il form padre, chiama form 2 e form2 va a scrivere alcuni valori in 3 textbox del padre:
CASO 1
FORM 2:
in form due dichiaro un form pubblico
Public FormCheMiHaAperto As Form
*****************************
IN FORM 1
SUB CLICK DI UN BOTTONE
Dim FORM2x As New FORM2
FORM2x .FormCheMiHaAperto = Me
FORM2x .Show()
END
******************************
TORNO IN FORM 2:
FACCIO CIO' CHE DEVO
FormCheMiHaAperto.Controls("TextBox1").Enabled = False
MI BECCO UN'ECCEZIONE.......
FormCheMiHaAperto.TEXT="CIAO"
funziona
CASO2
IN FORM 1
SUB CLICK DI UN BOTTONE
Dim FORM2xxx As New FORM2
FORM2xxx.Owner = Me.FindForm
FORM2xxx.Show()
FINE SUB
IN FORM 2
Me.Owner.Controls("TextBoxTraspRagSoc").Enabled = False
ECCEZIONE
Me.Owner.Text = "ciao "
FUNZIONA
........
dunque form1 istanzia un nuovo form2.... e form2 deve passare N stringhe, parametri o oggetti a form1 dopo avere fatto nuove elaborazioni....
form 2 non "DEVE E NON PUO" creare una NUOVA istanza di form1.... se facessi
dim fff as new form1
avrei accesso a tutti i controlli e che voglio.... ma non posso reistanziarlo, i dati sono gia' filtrati... se lo reistanziassi per assurdo farei farei una quantita immane di dataset (di cui ho gia' fatto il dispose ovviamente)
ma è form2 che deve poter scrivere nei controlli di FORM1
:::::::::::::::::::::::::::::::::::::::
form1.nomecontrollo.text = "valore"
NON PUO' FUNZIONARE PERCHE' FORM2 NON CONOSCE NULLA DI FORM1 VISTO CHE NON VIENE ISTANZIATO MA E' FORM1 A ISTANZIARE FORM2....
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 10 apr 2007 - 17:38
>no.... mi scuso ma mi sono spiegato male io.....
>dunque.... form1 cioe' il form padre, chiama form 2 e form2 va
>a scrivere alcuni valori in 3 textbox del padre:
>
>CASO 1
>FORM 2:
>
>in form due dichiaro un form pubblico
>Public FormCheMiHaAperto As Form
>
>
>*****************************
>IN FORM 1
>SUB CLICK DI UN BOTTONE
> Dim FORM2x As New FORM2
> FORM2x .FormCheMiHaAperto = Me
> FORM2x .Show()
>END
>
>******************************
>
>TORNO IN FORM 2:
>FACCIO CIO' CHE DEVO
>
>
>FormCheMiHaAperto.Controls("TextBox1").Enabled = False
>
>MI BECCO UN'ECCEZIONE.......
>
>FormCheMiHaAperto.TEXT="CIAO"
>funziona
>
>
>
>CASO2
>
>
>IN FORM 1
>SUB CLICK DI UN BOTTONE
>
> Dim FORM2xxx As New FORM2
> FORM2xxx.Owner = Me.FindForm
> FORM2xxx.Show()
>
>FINE SUB
>
>IN FORM 2
>
> Me.Owner.Controls("TextBoxTraspRagSoc").Enabled = False
>ECCEZIONE
>
> Me.Owner.Text = "ciao "
>FUNZIONA
>
>
>........
>
>dunque form1 istanzia un nuovo form2.... e form2 deve passare
>N stringhe, parametri o oggetti a form1 dopo avere fatto nuove
>elaborazioni....
>
>form 2 non "DEVE E NON PUO" creare una NUOVA istanza di form1....
>se facessi
>
>dim fff as new form1
>
>avrei accesso a tutti i controlli e che voglio.... ma non posso
>reistanziarlo, i dati sono gia' filtrati... se lo reistanziassi
>per assurdo farei farei una quantita immane di dataset (di cui
>ho gia' fatto il dispose ovviamente)
>
>
>ma è form2 che deve poter scrivere nei controlli di FORM1
>
>
>:::::::::::::::::::::::::::::::::::::::
>
>form1.nomecontrollo.text = "valore"
>NON PUO' FUNZIONARE PERCHE' FORM2 NON CONOSCE NULLA DI FORM1
>VISTO CHE NON VIENE ISTANZIATO MA E' FORM1 A ISTANZIARE FORM2....
>
>
>
>
>
Perchè non vuoi provare a scrivere come ti ho suggerito?
Un comando del tipo:
CType(Me.Owner, Form1).TextBox1.Enabled = False
ti assicuro che funziona. Va incontro a come hai già impostato le cose e NON viene creata una nuova istanza di form1.
Quello che avviene è:
Quando il tuo codice, a runtime, passerà da qui :
Dim FORM2xxx As New FORM2
> FORM2xxx.Owner = Me.FindForm
> FORM2xxx.Show()
Form2 si vedrà assegnato Form1 come owner.
Però scrivi semplicemente:
FORM2xxx.Owner=Me
basta e avanza!
Quando invece scrivi il codice, in progettazione, il compilatore non sa chi sarà lo owner. Al limite, durante l'esecuzione del programma, potrebbero essere anche diversi form. Quindi, per far sì che il compilatore ti accetti l'input, deve sapere che textbox1 fa parte della collezione dei controlli di owner e questo lo sa soltanto se gli dici che il tipo di owner è Form1.
Prova a scrivere la riga come te l'ho postata e se non funziona ti pago da bere!
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mer 11 apr 2007 - 07:59
ho provato a seguire la tua indicazione tramiste il directcast
DirectCast(Me.Owner, FORM1).TextBoxPIPPO.Text = "funziona!!!!!!!"
ORA FUNZIONA TUTTO ALLA GRANDE.... LA TUA INDICAZIONE E' STATA TERRIBILMENTE PREZIOSA!!!!!!!!!!!!!!!!!!!!!!!!!!!
GRZAZIE 1000
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 11 apr 2007 - 10:23
Allora paghi bere tu!
Il directcast è anche più 'riparmioso' se ricordo bene, solo che ha delle limitazioni di utilizzo e siccome non me le ricordo mai, uso sempre il ctype, ma ovviamente in questo caso va benissimo directcast.
Aggiornerò la mia paginetta con qualche esempio in più, compreso l'uso dell'owner, anche perchè è un sistema molto utilizzato e alla fin fine il problema di 'far parlare due form' come dici tu, è uno dei più gettonati.
Ciao e buon lavoro!
Torna su
Stanze Forum
Elenco Threads
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 !