Owner form

lunedì 09 agosto 2004 - 17.37

pecos81 Profilo | Junior Member

Ciao a tutti!
scrivo per chiedere aiuto su questo problema:
ho 3 forms delle quali una "jolly" che può essere aperta dalle altre 2.
Nelle 2 forms ho dei pulsanti che aprono la form jolly che carica un dataset. Nella form jolly ho un pulsante che,una volta premuto, mette in una casella di testo della form che l'ha aperta un valore ricavato dal dataset. + precisamente setto il valore di una property e la textbox si prende quel valore. come faccio a dire alla mia form jolly qual'è la form che l'ha aperta per settarne il valore?

Ciao e grazie

trinity Profilo | Guru

la prima cosa che mi viene in mente è molto semplicemente crearti una variabile public di tipo booleana e settare da false a true o viceversa quando apri la form "jolly" da una form all'altra, es:

Public prova,prova_1 as Boolean

la variabile prova si riferisce al prima form mentre prova_1 alla seconda

a questo punto come ti ho detto sopra setti il valore delle varibili e con una semplice if..end if gestisci la destinazione dei dati.

Ciao
Fabio

alextyx Profilo | Expert

In aggiunta a quanto già detto da trinity, puoi comunque passare l'oggetto textbox del form 'aprente' nel costruttore (new) del form che verrà aperto. L'unico particolare ed esiguo vantaggio, è di risparmiare una variabile (poca cosa) e di nn dover fare alcun test nel codice per decidere dove scrivere (già più utile), basterà scrivere sempre nell'oggetto ricevuto al momento della 'costruzione' dell'istanza del form che hai creato. Automaticamente le tue modifiche andranno sulla textbox del form voluto. Credo che su questa falsa riga ci siano altre 'millanta' variazioni possibili, magari passare come riferimento l'intero form 'aprente' al form 'aperto', anzichè la sola textbox, ma in buona sostanza puoi scegliere secondo il gusto personale, a questo punto!

pecos81 Profilo | Junior Member

Innanzitutto: grazie ragazzi!
la soluzione ke ho trovato io è questa:
prima di aprire la form jolly ne setto una property con il nome della form che la apre.
Il metodo funziona bene, però se la aprono in mille dovrò per ognuna aggiungere una condizione case nel mio select. spiego:

per aprire la form jolly da formA

frmjolly.frmsender = me.text (setto la proprietà frmsender,che ha associata una var tipo string,col nome del form)
frmjolly.show


dalla frmjolly

select case frmsender
case "formA"
formA.id = "x" (id è una proprietà che setta una variabile che uso in + punti)
case "formB"
formB.id = "X"
..............
end select


mi sarebbe, appunto, piaciuto evitare questo select e settare la variabile id con una sola riga di codice per tutte le form

frmsender.id = "X"

ma non sono sicurissimo che sia possibile

trinity Profilo | Guru

cmq. le soluzioni che ti abbiamo postato sono sicure. Per esempio la mia è una procedura molto semplice ma funzionante.

Ciao

pecos81 Profilo | Junior Member

si, è vero, infatti sto facendo dei test con le vostre proposte.

Grazie

alextyx Profilo | Expert

Caro Pecos, quando dicevo che era più importante evitare test nel codice, piuttosto che risparmiare una variabile, che nel caso di più form 'aprenti' potrebbe essere una stringa, o un Int, anzichè una boolean, era proprio perchè poi l'appetito vien mangiando! :-)
Tu hai parlato (ingannevolmente! ;-) )di due form e in tal caso le proposte avute tendono ad equivalersi. Se invece i form che possono aprire il tuo form 'Jolly' diventano, se nn mille, magari 4 o 5, allora per evitare di dover fare test lunghi (Select case o simili) e magari anche in più punti del codice, l'avere un riferimento preciso fin dall'inizio ti dà esattamente la possibilità che auspichi, ossia di riferirti sempre all'oggetto X sapendo che automaticamente il tuo lavoro si trasferirà sul bersaglio giusto. Ciao e buon lavoro!
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5