Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di goku370
    Registrato dal
    Oct 2003
    Messaggi
    569

    [VB.NET] Accesso ai controlli da tutte le classi

    Ho un semplicissimo programmino con una textbox e un pulsante.
    Questo è il codice...
    codice:
    Partial Class MainForm
    	
    	Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
    		' QUI VORREI RICHIAMARE LA SUB Modifica IN F2
    	End Sub
    	
    End Class
    
    Public Class F2
    	Sub Modifica
    		'ORA VORREI POTER CAMBIARE IL CAMPO text di di una textbox
    	End Sub
    End Class
    Ora, se voglio accedere alle proprietà di un controllo da una sub della classe MainForm, nessun problema... I miei problemi invece sono:
    1) Come faccio a richiamare da Button1Click la sub "Modifica" nella classe F2 ?
    2) Come faccio da questa sub a modificare i parametri dei controlli del mio form ?
    Una tecnologia sufficientemente avanzata è indistinguibile dalla magia. Terza legge di Clarke

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Basta che non ragioni per "classi" (che non godono, in generale, di vita autonoma ...).

    Devi avere un oggetto creato a partire da una determinata classe, per usarne i metodi.

    Se crei un oggetto di classe F2 all'interno del codice del ButtonClick1, l'oggetto dispone dei metodi definiti nella classe ... quindi

    codice:
    Partial Class MainForm
      Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim o As New F2
    
        o.Modifica()
      End Sub
    End Class
    Insomma, devi iniziare a ragionare ... OOP ...

  3. #3
    Originariamente inviato da oregon
    Se crei un oggetto di classe F2 all'interno del codice del ButtonClick1, l'oggetto dispone dei metodi definiti nella classe
    Nella classe MainForm?
    ---EDIT---
    Ah, ho capito.

    Modifica il metodo Modifica (scusate il gioco di parole) perché accetti come parametro la textbox su cui lavorare e perché sia Public (altrimenti non risulta accessibile dall'esterno della classe):
    codice:
    Public Class F2
    	Public Sub Modifica(ByVal CasellaDiTesto As System.Windows.Forms.TextBox)
    		CasellaDiTesto.Text = "Il testo che ci vuoi mettere"
    	End Sub
    End Class
    '---
    Partial Class MainForm
    	
    	Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
    		Dim oF2 As New F2
                    oF2.Modifica(NomeCasellaDiTesto)
    	End Sub
    	
    End Class
    .
    Oppure, se la tua sub deve lavorare solo sull'istanza di default di MainForm puoi fare così:
    codice:
    Public Class F2
    	Public Sub Modifica()
    		My.Forms.MainForm.CasellaDiTesto.Text = "Il testo che ci vuoi mettere"
    	End Sub
    End Class
    '---
    Partial Class MainForm
    	
    	Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
    		Dim oF2 As New F2
                    oF2.Modifica()
    	End Sub
    End Class
    .
    In ogni caso mi pare che questa funzione "Modifica" sia una funzione helper che non necessita di essere situata in una classe... considera la possibilità di spostarla in un modulo o di dichiararla come Shared.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    Nella classe MainForm?
    Che intendi?

  5. #5
    (ho editato, avevo inteso la tua risposta in modo errato)
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    Modifica il metodo Modifica (scusate il gioco di parole) perché accetti come parametro la textbox su cui lavorare:
    Questa e' la seconda parte di cio' che deve fare ... ovvero, permettere all'oggetto di classe F2 di operare sul controllo utilizzato nell'altra classe ...

    La prima cosa, ripeto, e' capire bene che il codice della classe (in genere, a parte le eccezioni ...) non esiste se non c'e' l'oggetto ...

    Insomma, al di la' della soluzione particolare del problema, il fatto principale da acquisire e' "pensare OOP".

  7. #7
    Certamente, il mio era, appunto, il seguito di quanto hai detto. Comunque, come ho già detto, quella funzione mi pare un'ottima candidata per stare in un modulo e non in una classe...
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di goku370
    Registrato dal
    Oct 2003
    Messaggi
    569
    Grazie delle risposte... Avevo inteso che bisognasse creare un oggetto riferito alla classe ma quando l'avevo fatto la classe F2 non riusciva ad accedere ai parametri del controllo... (forse perchè in un thread diverso da quello in cui è stato creto??? Può essere? )

    Originariamente inviato da MItaly
    Comunque, come ho già detto, quella funzione mi pare un'ottima candidata per stare in un modulo e non in una classe...
    Non ho capito esattamente cosa vuoi dire...
    Una tecnologia sufficientemente avanzata è indistinguibile dalla magia. Terza legge di Clarke

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come si fa ad immaginare tutta la storia del thread diverso dal tuo primo post in cui parlavi di un "semplicissimo programmino"?

    A questo punto, qual e' la situazione reale e i problemi che effettivamente hai?

  10. #10
    Utente di HTML.it L'avatar di goku370
    Registrato dal
    Oct 2003
    Messaggi
    569
    (scusate il ritardo nella risposta... la mia ADSL da i numeri!)
    Comunque il tuo metodo funziona alla perfezione MItaly... La questione dei thread non c'entra; era solo che nell'esecuzione del programma al richiamo dell'altra classe vedevo comparire un nuovo thread nell'elenco del debugger... Ma ora funzia senza problemi.
    Una tecnologia sufficientemente avanzata è indistinguibile dalla magia. Terza legge di Clarke

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.