Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Richimare un metodo definito nella form di avvio da altro form
Forum - C# / VB.NET - [C#] Richimare un metodo definito nella form di avvio da altro form

Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 18:14
Mercoledì, 07/11/2012
Ciao

Non riesco a richiamare un metodo definito nella classe a cui appartiene la form che viene caricata all'inizio.

Per richiamare il metodo devo richimarlo sull'istanza della classe (non è un metodo statico).
Quando il programma si avvia immagino venga creta un'istanza della classe del form principale.

Come definisco il nome di questa istanza per poterlo richiamare?

Sono obbligato a creare ESPLICITAMENTE una istanza? Ad esempio
Codice sorgente - presumibilmente Plain Text

  1. mainwindow win1=new mainwindow();



grazie
MArco

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 21:26
Mercoledì, 07/11/2012
Ciao
Si, a meno che il metodo non sia definito come shared (in vb.net) o che si dovrebbe tradurre come static, in C#, non lo puoi richiamare senza avere almeno un oggetto a cui il metodo appartiene. Ci deve essere un oggetto "che fa qualcosa".. Se hai questa necessità, forse è il caso di spostare il suddetto metodo in un modulo, in modo che sia disponibile in ogni parte del tuo progetto.

Ultima modifica effettuata da Renny il 07/11/2012 alle 21:29
PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 22:57
Mercoledì, 07/11/2012
Pensavo che l'oggetto esistesse in quanto quando avvio il programma la form viene creata.

Questa form pensavo fosse un oggetto vero e proprio.
Cavolo, se non lo è allora la domanda è: cosa è allora?

Non c'è quindi modo di richiamare un metodo definito nella classe della form creata alla partenza del programma senza dover creare un oggetto esplicitamente.

Ho capito giusto?

Grazie della disponibilità
Marco





PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2253
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:23
Giovedì, 08/11/2012
Si che c'è.

Nell'editor del form alle proprietà c'è la voce Modifiers
Solitamente è impostato su Private.

Ma modificandola in Public puoi accedere alla risorsa da qualsiasi form

Che poi ci sono tantissimi modi per accedere a membri di altri form.
io esempio uso questo sistema.


al form1 ho una textbox che voglio passare al form2

Codice sorgente - presumibilmente C# / VB.NET

  1. Form2 f = new Form2(texBox1);




al form 2

Codice sorgente - presumibilmente C# / VB.NET

  1. public Form2(TextBox t)
  2.  {
  3.            
  4. InitializeComponent();
  5.  
  6. MessageBox.Show(t.Text);
  7.  
  8.            
  9. }





PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 15:56
Giovedì, 08/11/2012
Salve,

vediamo se ho capito bene la situazione:

1) hai un form (diciamo Form1) che è il form principale, e viene aaperto all'avvio del programma;

2) hai un secondo form (diciamo Form2) che a un certo punto dell'esecuzione viene richiamato dal Form1;

3) il tuo problema consiste nel dover richiamare, dall'interno del Form2, un metodo non statico (diciamo FunzioneF1) che appartiene al Form1.

Dico bene?

Se la situazione e' questa, esisste un modo per risolvere il problema, senza dover creare materialmente i Form; dando per assunto che Form2 conosce il metodo che deve chiamare da Form1, e ne ha visibilità (per es. e pubblico), prova a procedere così:

1) dichiara all'interno di Form2 una property Public e WriteOnly dello stesso tipo di Form1 (chiamiamola ParentForm) con relativa variabile privata (chiamiamola m_ParentF)

2) in Form1 subito prima di richiamare Form2 scrivi:

Codice sorgente - presumibilmente C# / VB.NET

  1. Form2.ParentForm = Me



3) dopodiche' in Form2 dovresti tranquillamente poter scrivere:

Codice sorgente - presumibilmente Plain Text

  1. m_ParentF.FunzioneF1()




Ciao. :k:

Luigi

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 17:03
Giovedì, 08/11/2012
Testo quotato

Postato originariamente da Thejuster:

Si che c'è.

Nell'editor del form alle proprietà c'è la voce Modifiers
Solitamente è impostato su Private.

Ma modificandola in Public puoi accedere alla risorsa da qualsiasi form

Che poi ci sono tantissimi modi per accedere a membri di altri form.
io esempio uso questo sistema.


al form1 ho una textbox che voglio passare al form2

Codice sorgente - presumibilmente C# / VB.NET

  1. Form2 f = new Form2(texBox1);




al form 2

Codice sorgente - presumibilmente C# / VB.NET

  1. public Form2(TextBox t)
  2.  {
  3.            
  4. InitializeComponent();
  5.  
  6. MessageBox.Show(t.Text);
  7.  
  8.            
  9. }





Beh, ma se fai così instanzi un oggetto della classe form1.. Crei un nuovo oggetto.
Lui chiede "Sono obbligato a creare ESPLICITAMENTE una istanza? Ad esempio"...
Certo, nel momento che hai creato l'oggetto, sia esso di tipo Form1 o textbox, o ClasseInventata, sempre un oggetto devi instanziare.. Che per carità tu puoi anche creare Form1, usare il metodo e poi dargli dispose, senza mostrarlo all'utente...

PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 22:48
Giovedì, 08/11/2012
Testo quotato

Postato originariamente da gigisoft:

Dico bene?




Si Luigi, hai colto il problema.

Grazie della risposta.

Grazie a tutti quelli che sono intervenuti.

Ciao :k:
Marco

PM Quote