Autore Topic: [RISOLTO] Creare evento che restituisca un intero  (Letto 1110 volte)

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo
[RISOLTO] Creare evento che restituisca un intero
« il: 19 Ottobre 2012, 21:49:05 »
Salve a tutti.
Vorrei creare una Form a cui attaccare un oggetto che genera un evento con ritorno di un valore (come fosse una funzione). Documentandomi sul vostro sito ho imparato come creare l'evento e come agganciare gli eventi di un oggetto ad una Form. Ora vorrei fare un passo in più, (visto che il libro riporta tale possibilità) ossia di generare l'evento e riportare indietro un intero nel punto in cui viene sollevato. Ho creato un piccolo programma con quanto spiegato, ma sembra che non accetti la possibilità di restituire un valore dalla sub che gestisce l'evento. Probabilmente vi è qualche regola che mi è sfuggita?  Allego le foto del codice della Form con l'errore al via dell'esecuzione e il codice dell'oggetto creato.

Grazie a tutti per le vostre rapide risposte.
Giovanni
« Ultima modifica: 21 Ottobre 2012, 12:29:21 da g.grandi »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creare evento che restituisca un intero
« Risposta #1 il: 20 Ottobre 2012, 00:12:10 »
Più che le immagini del codice e del MessageBox, penso che sarebbe stato più utile il sorgente del programmino. Io non ho capito se vuoi la restituzione del solo valore numerico corrispondente all'evento generato o se vuoi la restituzione della risposta prodotta dall'evento scateneta, in termini di oggetto, come immagine, stringa o quant'altro possa essere stato fornito dall'evento stesso.
 :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare evento che restituisca un intero
« Risposta #2 il: 20 Ottobre 2012, 01:30:04 »
Io opero con Gambas-3, ma immagino che riguardo a quest'argomento la cosa non cambi. Lanciando il programma:
* alla riga:
 
Codice: gambas [Seleziona]
Event generaevento() As Integer

ottengo l'errore: Unexpected As

* lasciando scritta la riga:
Codice: gambas [Seleziona]
Public Sub Oggetto_generaevento() As Integer

viene restituito l'errore da te rilevato e mostrato nella prima immagine che hai allegato. Per far sparire quell'errore, è necessario eliminare le parole: As Integer

* a questo punto non ha più senso il comando:
Codice: gambas [Seleziona]
Return 99

Ed infatti, lasciandolo, si ottiene ovviamente la segnalazione dell'errore: Return value datatype non specified in function declaration.


Comunque sia, al di là della questione accademica sulla restituzione di un valore da parte di un evento sollevato, la restituzione può essere ottenuta più semplicemente chiamando una Funzione.
« Ultima modifica: 02 Maggio 2014, 11:48:11 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creare evento che restituisca un intero
« Risposta #3 il: 20 Ottobre 2012, 22:48:14 »
al di là della questione accademica sulla restituzione di un valore da parte di un evento sollevato, la restituzione può essere ottenuta più semplicemente chiamando una Funzione.
Non possiamo dirlo perché potrebbe essere che g.grandi abbia pensato di organizzare il programma con 2 Form ed il valore a cui si riferisce debba tornare, per Es., alla FMain dalla seconda Form. In codesto caso, per ottenere la restituzione del/dei valori bisogna ricorrere al metodo nascosto _new.
Ecco perché avevo espresso l'opinione di guardare dentro il programma, oppure, potrebbe allegare le immagini della/delle Form che compongono la parte grafica del programma.
 :ciao:
:ciao:

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo
Re: Creare evento che restituisca un intero
« Risposta #4 il: 20 Ottobre 2012, 23:49:43 »

Il programmino (che allego per completezza) consta semplicemente di una form vuota alla quale attacco un oggetto che scatena un evento sulla form con lo scopo di farsi restituire il valore di una variabile intera (della form). L'idea è quella di creare un'oggetto completamente indipendente dalla form a cui lo collego così da poter essere poi riutilizzato in altri progetti.
Mi sono documentato meglio sul manuale di Gambas (A Beginner's guide to Gambas) a pagina 310 dove avevo preso spunto per tale idea. Riporta effettivamente che l'evento può restituire un unico valore di tipo Boolean associato alla riuscita dell'evento o allo STOP EVENT. Io invece avevo inteso che il boolean fosse solo un esempio per spiegare il modo di creare l'evento descritto. Ora o risolto il problema come suggerito da vuott: l'evento richiama un metodo dell'oggetto che assegna il valore della varibile intera della form ad una varibile privata dell'oggetto. Grazie per l'idea.

Saluti a tutti.
Giovanni

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creare evento che restituisca un intero
« Risposta #5 il: 21 Ottobre 2012, 08:39:42 »
Bene! Allora puoi aggiungere Risolto alla discussione.  :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Creare evento che restituisca un intero
« Risposta #6 il: 19 Novembre 2013, 10:33:28 »
Aggiornamento.

Segnalerei questa pagina della WIKI:

http://www.gambas-it.org/wiki/index.php?title=Gli_eventi

e dunque, il riferimento al tipo di valore va inserito come parametro (dell'Evento: generaevento) da passare alla routine che sarà sollevata dall'Evento medesimo nella Classe principale:
Codice: gambas [Seleziona]
Event generaevento(variabile As Integer)
« Ultima modifica: 02 Maggio 2014, 11:49:39 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »