Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [VB.NET] Label con evento delegato

    Ciao a tutti,

    Con le due seguenti funzioni creo dinamicamente delle label, ho cercato di aggiungere un evento handler dinamico ma non sono riuscito perche mi dice che AddressOf deve essere senza parentevi,
    Ma come posso passargli il mio parametro allora?

    codice:
        Private Sub ListProfile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim Sql As String
            Dim dt As New DataTable
            Dim ds As New DataSet
    
            Dim myfont As New Font("Microsoft Sans Serif", 10, FontStyle.Bold)
            Dim CNT As Integer = 0
            Dim X As Integer = 30
            Dim Y As Integer = 440
    
            If GeneralModel.language = "ITA" Then
                lbInfo.Text = "INFORMAZIONI E " + vbCrLf + "DATI ANAGRAFICI"
                lbRilevamenti.Text = "RILEVAMENTI " + vbCrLf + "SU VETTURA"
                lbNote.Text = "Note"
            ElseIf GeneralModel.language = "ENG" Then
                lbInfo.Text = "PERSONAL DATA " + vbCrLf + "AND INFORMATION"
                lbRilevamenti.Text = "PHOTOGRAPHS " + vbCrLf + "OF THE VEHICLE"
                lbNote.Text = "Annotation"
            End If
            lbName.Text = GeneralModel.NameModel + " - " + GeneralModel.NameDoc
    
            '-------------------------RILEVAMENTI SU VETTURA
            db.Connetti()
    
            CNT = 0
            X = 30
            Y = 440
    
            Sql = "SELECT main_code,sub_code,desc_ita,desc_eng,testo,note_keypoint,check_keypoint "
            Sql = Sql & "FROM NewMac_Profili "
            Sql = Sql & "WHERE newmac_id = " & CInt(GeneralModel.IdDoc) & " AND sub_code = '00' AND LEFT(main_code,1) <> 'A' "
            Sql = Sql & "ORDER BY main_code ASC, sub_code ASC "
    
            Dim da As New OleDb.OleDbDataAdapter(Sql, db.istance)
            da.Fill(dt)
    
            Dim myDelegate As New System.EventHandler(AddressOf MainCat_Click(1))
            Dim temp As Label() = New Label(dt.Rows.Count) {}
    
            For Each myRows In dt.Rows
                temp(CNT) = New Label
                With temp(CNT)
                    ' Set the properties of the Label here ...
                    .Location = New System.Drawing.Point(X, Y)
                    .Size = New System.Drawing.Size(300, 20)
                    .TextAlign = ContentAlignment.MiddleLeft
                    .ForeColor = System.Drawing.Color.White
                    .BackColor = System.Drawing.Color.Transparent
                    .Font = myfont
                    .Cursor = Cursors.Hand
    
                    ' Now, tell the Label what function to use when clicked.
                    AddHandler .Click, myDelegate
    
                End With
    
                'b.Click+=new EventHandler(b_Click);
                If GeneralModel.language = "ITA" Then
                    temp(CNT).Text = myRows.Item("desc_ita")
                ElseIf GeneralModel.language = "ENG" Then
                    temp(CNT).Text = myRows.Item("desc_eng")
                End If
    
                Me.Controls.Add(temp(CNT))
                CNT += 1
                Y = Y + 20
            Next
            db.Disconnetti()
            '-------------------------RILEVAMENTI SU VETTURA
    
            '-------------------------INFORMAZIONI E DATI ANAGRAFICI
            db.Connetti()
    
            ds.Clear()
            dt.Clear()
            Erase temp
    
            CNT = 0
            X = 30
            Y = 330
    
            Sql = "SELECT main_code,sub_code,desc_ita,desc_eng,testo,note_keypoint,check_keypoint "
            Sql = Sql & "FROM NewMac_Profili "
            Sql = Sql & "WHERE newmac_id = " & CInt(GeneralModel.IdDoc) & " AND sub_code = '00' AND LEFT(main_code,1) = 'A' "
            Sql = Sql & "ORDER BY main_code ASC, sub_code ASC "
    
            da.SelectCommand = New OleDbCommand(Sql, db.istance)
            da.Fill(dt)
    
            temp = New Label(dt.Rows.Count) {}
    
            For Each myRows In dt.Rows
                temp(CNT) = New Label
                temp(CNT).Location = New System.Drawing.Point(X, Y)
                temp(CNT).Size = New System.Drawing.Size(300, 20)
                temp(CNT).TextAlign = ContentAlignment.MiddleLeft
                temp(CNT).ForeColor = System.Drawing.Color.White
                temp(CNT).BackColor = System.Drawing.Color.Transparent
                temp(CNT).Font = myfont
                If GeneralModel.language = "ITA" Then
                    temp(CNT).Text = myRows.Item("desc_ita")
                ElseIf GeneralModel.language = "ENG" Then
                    temp(CNT).Text = myRows.Item("desc_eng")
                End If
    
                Me.Controls.Add(temp(CNT))
                CNT += 1
                Y = Y + 20
            Next
            db.Disconnetti()
            '-------------------------INFORMAZIONI E DATI ANAGRAFICI
        End Sub
        Private Sub MainCat_Click(ByVal param As Integer)
            MessageBox.Show("Click")
        End Sub
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Soluzione molto stupida.......

    Per ora ho sistemato in questo modo:
    codice:
        Private Sub MainCat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            MessageBox.Show(sender.name)
        End Sub
    Ho dichiarato il sender nella mia sub.
    Nella creazione della label ho valorizzato la proprietà name con il mio parametro e poi lo intercetto tramite sender.name......

    Penso che sia una soluzione veramente di fortuna per chi muove i primi passi, ma funzionale....
    Spero di qualcuno mi possa indirizzare verso la soluzione più corretta ed elegante....
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    perche stupida? è cosi che si fa.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    E non c'e nessun altro modo per aggiungere dinamicamente un handler con passaggio di parametri?
    cioè oltre al sender e alla "e" io avre bisogno di passare una valore che aggancio dinamicamente alla label...

    In giro lo letto del medoto invoke ma sinceramente non ci ho capito molto e non sono sicuro che serva al passaggio di parametri
    Che mestiere difficile.....essere da soli ancora di più

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