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

    [VB2010] Evento click senza id

    Salve a tutti, premetto che non son sicuro sia possibile quel che cerco di realizzare poichè non ho trovato la soluzione su nessun libro o guida di VisualBasic, perciò non avendo altre idee se non è realizzabile mi accontento di soluzioni simili.

    Detto questo, in poche parole vorrei usare un indice per utilizzare un evento senza dover fare copia ed incolla, ovvero una cosa simile:

    codice:
    Public Class Form1
        Dim ITEM As Button
        Dim I As Integer = 1
    
    
        Private Sub ITEM(I)_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ITEM(I)_Click
            MsgBox("Funziona.")
        End Sub
    
    
    End Class

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non userai gli indici ma la

    AddHandler
    http://msdn.microsoft.com/it-it/library/7taxzxka.aspx

    e un evento comune

    Ad esempio

    http://msdn.microsoft.com/en-us/library/ms743596.aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Ho appena fatto una cosa del genere, come ha detto oregon, devi usare AddHandler, ma forse come metodo non è correttissimo, poichè molto spartano.
    Se posso, metto il codice della classe che ho usato:
    codice:
    Public Class tLists
    
        ''' <summary>
        ''' Contiene tutti gli hashcodes delle ListViews
        ''' </summary>
        ''' 
        Public Property hashCodes As ArrayList = New ArrayList
    
        ''' <summary>
        ''' Contiene tutti i controlli
        ''' </summary>
        Public Property controls As List(Of ListView) = New List(Of ListView)
        ''' <summary>
        ''' Imposta il codice hash del controllo
        ''' </summary>
        ''' <param name="hCode">Codice Hash</param>
        Public Sub setHCode(ByVal hCode As Integer)
            hashCodes.Add(hCode)
        End Sub
    
        ''' <summary>
        ''' Setta il controllo ListView
        ''' </summary>
        ''' <param name="ctrl">Il controllo Listview da settare</param>
        ''' <returns>La funzione restituisce stesso controllo ListView aggiunto</returns>
        Public Function setCtrl(ByVal ctrl As ListView) As ListView
            controls.Add(ctrl)
            Me.setHCode(ctrl.GetHashCode())
            Return ctrl
        End Function
    
        ''' <summary>
        ''' Ottiene il controllo dal codice Hash
        ''' </summary>
        ''' <param name="hCode">Codice Hash</param>
        ''' <returns>La funzione restituisce il controllo corrispondente al valore Hash</returns>
        Public Function getCtrl(ByVal hCode As Integer) As ListView
            Return controls(hashCodes.IndexOf(hCode))
        End Function
    End Class
    Ora che ci penso, al posto di ListView si può usare normalmente Control(per una maggiore versatilità), e successivamente usare CType per "trasformarlo" in un Button o qualsiasi cosa.
    In pratica tu crei un'istanza di questa classe(che consiglio di creare per ogni gruppo di controlli, come un gruppo di Button, un gruppo di ListView, e così via), quando ne hai bisogno aggiungi a questa classe il controllo creato mediante [tList].setCtrl(control), e ne aggiungi l'handler. Quando ne hai bisogno, esempio nella sub di richiamo dell'evento, basta che tu "chiedi" all'oggetto dov'è contenuto il controllo, di cercare nei suoi controlli quello corrispondente all'hash che genera l'evento in questione. Esempio:
    codice:
    MsgBox(CType([tList].getCtrl(sender.GetHashCode), Forms.TextBox).Text)
    Nel caso uso una TextBox, che è un esempio più immediato.
    Sender è l'oggetto generato appunto dal sender, che è la TextBox.

    Spero di essere stato chiaro e di essere stato sopratutto d'aiuto

  4. #4
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da IAL32
    Ho appena fatto una cosa del genere, come ha detto oregon, devi usare AddHandler, ma forse come metodo non è correttissimo, poichè molto spartano.
    Penso che per il problema in questione, per come l' ho inteso io..., è più adatto il consiglio di Oregon perchè semplice e funzionale, il tuo codice è "troppa roba"...sempre per la richiesta di ValentinoL.
    Se i controlli sono pochi si può rendere ancora più semplice scrivendo gli stessi nella Handles della stessa Sub tipo:
    codice:
        Private Sub ITEM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click, Button2.Click, Button3.Click, _
            CheckBox1.Click, ListBox1.Click, PictureBox1.Click
    
            MsgBox("Hai cliccato su: " & CType(sender, Control).Name)
    
        End Sub
    se sono molti basta un ciclo e usare l' AddHandler, giusto per praticità...

  5. #5
    Perfetto! Grazie a tutti, ci son riuscito con i vostri consigli! A presto!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.