Dichiarazione di una Routine di tipo Public ed evocarla

mercoledì 10 maggio 2006 - 17.32

trinity Profilo | Guru

Ragazzi,
ho 2 form, nella prima vi dichiaro una Routine di tipo Public, ecco il codice:

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

e dalla form due la richiamo in questo modo:

Form1.enable_campi(True)

e tutto funziona.

la mi adomanda è questa: nella prima form ho delle varibili dichiarate in questo tipo ed in questa posizione della form:

Public Class Form1
Dim ndec As Integer = 0
Dim flag_arc As Integer = 0
ecc.....

ok? quando apro questa form con il debug noto giustamente che il compilatore passa per prima sul codice delle variabili che ho dichiarato e scritto precedentemente. La cosa che non risco a campire è che lasciando aperta la form1 e richiamando la form2 nella quale richiamo la routine public "enable_campi" della form1 quando il compilatore passa sulla su questa voce non va direttamente ad eseguire il codice della Routine ma bensì ripassa sulle vairbile dichiarate all'inizio della form che tra l'altro non centrano nulla, come se fosse che la form1 venisse di nuovo aperta ma non è così. Perchè? oppure è giusto così? Mi sapete spiegare?
Esiste un altro modo e pertanto il mio di richiamare delle public routine tra due form è sbagliato?

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

trinity Profilo | Guru

>trinity è normale che si comporti così perchè il form è una classe
>e quando richiami una funzione della classe viene richiamato
>il costruttore... e tutte le sue variabili
>per questo per delle funzioni comuni si usa una classe apparte
Te mi dici che invece di creare una public Routine mi conviene creare una classe, ok ma come faccio nella classe a dire che i campi da gestire sono nella form1?
nel caso riportato di seguito, come potrei creare una classe?
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
>e comunque hai un altra istanza della classe form1
scusa qui non ho capito, cosa intendi quando dici che ho un'altra istanza della classe form1?
>Marco Caruso
>[MCSD.NET]
>il mio blog
>http://blogs.dotnethell.it/Coach


Inoltre ti volevo chiedere un'informazione:

sia nella form1 che nella form 2 eseguo quasi lo stesso codice per richiamare un record specifico dal database, mi spiego meglio.
Sulla Form1, che è di inserimento dati, al focus della Textbox1 che si riferisce al codice primario di inserimento vado ad eseguire una stored di ricerca nel database e se il codice che viene scritto esiste, prelevo i dati corrispondenti con una select e li faccio vedere a video. La setssa cosa la vado a afre con la form2 in quanto quest'ultima rappresenta la visualizzazione di tutti i record presenti nel db,per farli visualizzare utilizzo una listview ed al click sul codice che si desidera visualizzare, eseguo la stessa stored riportando i dati nella form1 chiudendo ovviamente la form2. La domanda che ti chiedo è la seguente: è consigliabile eseguire due strutture di codice, anche se fondamentalemnte simili, nelle due distinte form per richiamare i dati da far visualizzare oppure come ho sperimentato e funziona, nel modul che ho nel progetto creare quanto segue:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ed il valore della variabile "codice" varia a seconda della form in cuimi trovo, così in poche parole scrivo una sola procedura di codice che posso riutilizzare in ogni parte del progetto dove c'è ovviamente rifermento alla Form "pagamenti"

Spero di essermi fatto capire

Ciao e grazie

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

trinity Profilo | Guru

Ho provato a fare come hai detto te cioè creando una classe, ti posto il codice perchè sembra che funzioni tutto ma i dati sulla form non vengono visualizzati.

tieni presente che all'interno della classe ho creato una routine di tipo public passandoci dua parametri, uno la form come mi hai detto nell'esempio e il secondo parametro è invece il codice che a seconda della form in cui mi trovo il controllo che identifica il codice è diverso.
Comunque ti posto come ho detto sia il codice della classe che il codice di come la richiamo, mi potresti dire dove sbaglio e perchè nonvengono visualizzati i dati sulla form? Grazie

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

codice che richiamo dalla form: Dim clspag As New Payment clspag.editpagamenti(Pagamenti, Me.ListView1.SelectedItems(0).Text) Me.Close() Me.Dispose()
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

trinity Profilo | Guru

In che senso provo a passare la form, come hai visto nell'ultimo codice che ti ho postato la form gliela passo, si chiama "pagamenti", comunque perchè mi dici anche che non riesci a capire il motivo per il quale eseguo tutto in un'altra form.
Ti spiego velocemente così forse mi potrai aiutare meglio, sto facendo un piccolo programma di magazzino e contabilità, le due form che ripeto continuamente sono la prima (ossia form1 per intenderci) serve come input dei dati, la seconda tramite listview visualizzo tutti i movimenti che ho salvato nel database. Ho deciso di fare un'opzione che dalla listview cliccando sul movimento che si desidera modificare, i dati di riferimento vengono riportati nelle form1 in modalità di modifica. Questa stessa procedura può anche avvenire evitando di aprire la form2 ma bensì inserendo un codice esiste nella textbox1(che sarebbe la text di riferimento del codice al momento del'inserimento dei dati). In altre parole ci sono due modi per visualizzare nella form di input i dati richiamti dal db. A questo punto per evitare di scrivere doppio codice ero propensoi a creare un'unica classe con la variate del codice che a seconda di dove uno si trova, il codice stesso veniva valorizzato o dalla textbox1 oppure dalla Me.ListView1.SelectedItems(0).Text....

Eco perchè ho deciso di fare questo e di chiedere consiglio e semmai un esempio di come meglio e giusto procedere.

ti dirò di + proprio qualche minuto fa ho provato ha sfruttare la classe form1 senza crearne un'altra in effetti forse non avrebbe senso crearne altre, ho scritto al suo interno questo codice:

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

e dalla form 2 per richiamare questo codice ho utilizzato le seguente sintassi:

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

Utilizzo il debug ed esamino il codice, i dati vengono passati tranquillamente ma non vengono visualizzati sulla form

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

trinity Profilo | Guru

Si li ho letti, ma nel mio caso in un programma gestionale devo trattare e passare dati tra + form utilizzando avvolte anche quasi lo stesso codice e per questo che vorrei, scusa il gioco di parole) utilizzare un codice unico se è possibile il quale può essere gestito in + form stesse. Comquneu non mi riesco a spiegare perchè il codice che utilizzo controllandolo con il debug ad ogni passaggio il dato viene preso correttamente dal db ma alla fine non mi viene visulizzato nulla sulla prima form, forse perchè la faccio da un'altra form? Ma vedo molti gestionali che la visualizzazione degli archivi avvengono in form diverse da quella di inserimento dati...

Marco non so più cosa pensare...perchè alla fine ho utilizzato un codice abbastanza semplice e logico

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5