Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB2010 WINFORMS] riconoscere il chiamante di una SUB/FUNCTION

    ciao a tutti...

    Ho una particolare function dichiarata in un Modulo, questa viene condivisa con tutto il progetto e quindi utilizzata a tutti i livelli...in particolare, in questa function, ad un certo punto del codice, legge e scrive un valore in una label del form corrente. Ho utilizzato Form.Activeform per risalire al form corrente attivo e la label ha lo stesso nome per tutti i forms...fin qua nessun problema se non quando questa function viene chiamata nell'evento Load di qualsiasi form.... in quel caso, la proprietà ActiveForm restituisce Nothing, quindi non scrive nulla nella label del form....
    ho pensato di poter risolvere magari se è possibile riconoscere il chiamante di questa function/sub così potrei risalire al form corrente ma non ho trovato nulla a riguardo...
    Chiedo lumi e magari qualche altra idea che sia diversa da quella di passargli come paramnetro il form ...
    Grazie
    Michele

  2. #2
    Così ad occhio ti direi che esiste un altro modo più "object oriented", ma senza un po' di codice è difficile dirti qualcosa di più.
    Chi non cerca trova.

  3. #3
    ciao Tas
    se puo esser utile più o meno in sintesi adesso faccio così
    codice:
    Module Module1
    
        Function Prova()
    
            '........................
            '........................
    
    
            'Instanzio una variabile che punta alla label del form attivo
            Dim StatusLabel As Label = Form.ActiveForm.Controls("Label1")
    
            ' se il puntatore non è su nothing scrive nella label
            If Not IsNothing(StatusLabel) Then StatusLabel.Text = "PIPPO"
    
            '.....................................
        End Function
    End Module
    ho dovuto mettere un "if not isnothing" per evitare di ottenere l'errore quando viene chiamata nell'evento Load (così però non scrive nulla in quel caso )

    ps. si è capito che nell'esempio, il nome della Label è "Label1"..
    per altre info a disposizione


    Aggiungo il codice del form così da incollarlo insieme a quello del modulo postato ed effettuare una prova per capire il meglio fenomeno:

    nel form ci deve essere un bottone "Button1" e una Label "Label1" per fare una prova lanciando l'esecuzione dall'avento load non scrive nulla, mentre se clicco sul bottone si...
    codice:
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Prova()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Prova()
        End Sub
    End Class
    Michele

  4. #4
    Ma cosa devi fare esattamente con queste Label nei vari form? I form sono tutti uguali (cioè istanziati dalla stessa classe)?
    Chi non cerca trova.

  5. #5
    in che senzo cosa ci devo fare....
    per esempio ogni qual volta che questa function viene chiamata mi deve visualizzare nellla label del form corrente, una data e il numero operarore che ha effettuato modifche al file ( i form non sono della stessa classe ma hanno questa label con lo stesso Nome) dovrebbe funzionare a mo di status bar insomma...e adesso fà il suo dovere a meno questa viene chiamata nell'evento Load allora là non scrive perchè non rileva il form corrente....

    il codice che ho postato può essere utile a capire l'inconveniente!
    Michele

  6. #6
    E fare una roba tipo questa?
    codice:
    'modulo
    Public Function Prova() As String
        ....
        Return "PIPPO"
    End Function
    
    'nel form
    Label1.Text = Prova()
    Chi non cerca trova.

  7. #7
    la mia funzione vera e propria mi restituisce altro, cioé un' arraylist del contenuto del file letto, e non posso utilizzarla per restituire il valore per la label ...nel mio progetto questa funzione viene richiamata da circa una 30 di postazioni sparse per tutto il progetto/forms...
    Ogni qual volta che è necessaria una rilettura dei dati dal file (e lo fa questa funzione) deve stamparmi un valore (in questo caso data ultima modifica e operatore memorizzati in quel file) sulla famosa label del form corrente! Ripeto adesso funziona ma solo nel caso dell'evento Load non và, quindi a ogni apertura di ogni form risulta vuota la label!
    Michele

  8. #8
    Evidentemente nell'evento Load il form, ancora in fase di caricamento, non è ancora stato assegnato alla proprietà ActiveForm. Non capisco però il bisogno di usare ActiveForm, visto che la chiamata alla funzione Prova() la fai direttamente dal form interessato. Potresti passare il riferimento al form o addirittura alla label, in questo modo:
    codice:
    'modulo
    Public Function Prova(lab As Label) As ...
        ...
    
        lab.Text = "PIPPO"
    
        ...
    
        Return ...
    End Function
    
    'nel form
    ret = Prova(Label1)
    Chi non cerca trova.

  9. #9
    si tas, l'avevo detto al primo post che l'idea del parametro sarebbe una idea, esattamente come hai postato adesso ...ma volevo evitare di modificare oltre 30 postazioni in cui viene chiamata questa sub nel mio enorme progetto ma se è l'unica questa....
    adesso mi é venuto in mente di modificare solo quelle chiamate negli eventi load dei forms (dove non funziona adesso activeform) passandoli come parametro o il form me.form o la label me.form.label1 come parametro Optional....in maniera tale che nella sub, se quel parametro è nothig allora prende il riferimento da activeform per tutte le altre chiamate...almeno mi risparmio di andare a modificare tutte le altre chiamate

    ciao e grazie alla prossima
    Michele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.