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

    [VB.NET]Problema Funzione Shared

    Ho una funzione Shared dalla quale ho bisogno di enumerare le finestre MDI aperte. Se richiamo un'altra funzione che provveda ad inserire in un array la lista delle form aperte mi da errore:
    codice:
    Impossibile fare riferimento ad un membro di istanza di una classe all'interno di un metodo o di un inizializzatore di membri condivisi senza un'istanza esplicita della classe
    . Se invece l'array lo creo direttamente nella funzione Shared così:
    codice:
    Dim i As Integer
            Dim zCtrl As Control
            For Each zCtrl In Me .MdiChildren
                lista(i) = zCtrl.Name
                i += 1
            Next zCtrl
    Errore:
    codice:
    ME è valido solo all'interno di un metodo di istanza
    Mi sapreste consigliare su come risolvere?

  2. #2
    una cosa :
    posta tutta la funzione...

    ma la funzione dove gira???
    nel form dove c'è la funzione?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Appunto ... secondo te, quel "Me" a chi si riferisce?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Re: [VB.NET]Problema Funzione Shared

    Originariamente inviato da mardok30
    Ho una funzione Shared dalla quale ho bisogno di enumerare le finestre MDI aperte. [...]
    Errore:
    codice:
    ME è valido solo all'interno di un metodo di istanza
    Mi sapreste consigliare su come risolvere?
    Il numero di finestre aperte è uno stato che riguarda una particolare istanza (oggetto) del form contenitore e, inoltre, degli oggetti che costituiscono le form figlie.

    Quindi, non è un'informazione che - a mio avviso - è possibile utilizzare in un metodo statico.

    L'errore è lampante: non puoi comunque usare Me poiché il metodo Shared è associato alla classe e non ad un oggetto specifico (potresti invocarlo senza creare un oggetto con New ma semplicemente facendo riferimento alla classe).

    Stai usando una parola chiave, Shared, di cui non hai ben presente il significato, legato alla programmazione ad oggetti. Documentati su MSDN o con qualche ricerca.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Appunto ... secondo te, quel "Me" a chi si riferisce?
    Me si riferisce al Form principale(dove è inserita la funzione), cioè il form padre.

    Stai usando una parola chiave, Shared, di cui non hai ben presente il significato
    Non posso fare altro che condividere(purtroppo )
    una cosa :
    posta tutta la funzione...
    codice:
    Dim lista() As String
    
     Shared Sub Main()
            AddHandler Application.ThreadException, AddressOf GestoreEccezioni
            Application.Run(New FrmMain)
        End Sub
    
     Private Shared Sub GestoreEccezioni(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)
            EnumerazioneFinestreAperte()
            msgbox (lista(1))
    End Sub
    
        Private Sub EnumerazioneFinestreAperte()
            Dim i As Integer
            Dim zCtrl As Control
            For Each zCtrl In MyBase.MdiChildren
                lista(i) = zCtrl.Name
                i += 1
            Next zCtrl
        End Sub
    Queste sono tutte le funzioni, inserite tutte nella form padre.
    Ciao

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Dal mio punto di vista, in questo caso non ha senso valutare il codice che hai scritto e vedere come correggerlo mantenendo la funzione di cui parli Shared.

    Il punto della questione è che stai lavorando con oggetti, quindi con istanze di classi, pertanto non puoi fare uso di una funzione Shared.

    Riscrivi il codice evitando la creazione di un metodo statico ottenuto dalla parola chiave Shared, poi se avrai ancora problemi vedremo di correggerlo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.