Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560

    [2.0-VB.NET] Assegnare un Handler ad un controllo in una pagina da un modulo

    Ciao a tutti,
    ho varie pagine ASPX in cui ho vari controlli. Alcuni di questi controlli sono identificabili per mezzo di una sintassi particolare del nome, ad esempio per una textbox avrò txt_00_xxxx
    dove 00 è un indice numerico e xxxxx è una piccola descrizione.

    Identifico in pratica i controlli che mi interessano vedendo se hanno i due underscore al posto giusto nel nome con un ciclo "for each control"... questo per automatizzare l'assegnazione di un evento.

    Ho quindi tanti controlli che devono eseguire lo stesso evento alla modifica e quindi ho creato una sub che cicla tutti i controlli di un "contenitore" e se hanno i 2 trattini bassi gli assegna l'evento con "AddHandler evento AdressOf nomesub".

    Ora fin qui tutto funziona bene... però visto che la sub che cicla i controlli e assegna l'handle è sempre uguale per tutte le pagine vorrei inserirla, per ottimizzare il codice, in un modulo però non so come indicare la funzione da assegnare all'evento che tra l'altro è contenuta nella pagina...

    Ricapitolando ora ho
    in pagina.aspx: controlli, sub AddHandler e sub evento

    Vorrei fare così
    in pagina.aspx: controlli e sub evento
    in modulo.vb: sub AddHandler

    Spero di essere stato chiaro e spero che possiate darmi una mano...

    ciao e grazie mille

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Re: [2.0-VB.NET] Assegnare un Handler ad un controllo in una pagina da un modulo

    Così ?

    codice:
    Module AddHandlerModule
        Public Sub AggiungiGestori(ByVal Pagina As Page)
            For Each controllo As Control In Pagina.Controls
                '...
            Next
        End Sub
    End Module
    E da ogni pagina:

    codice:
    AddHandlerModule.AggiungiGestori(Me)
    ?

  3. #3
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Per usare i tuoi esempi:

    codice:
    Module AddHandlerModule
        Public Sub AggiungiGestori(ByVal Pagina As Page)
            For Each controllo As Control In Pagina.Controls
    
                If TypeOf Ctrl Is TextBox AddHandler controllo.TextChanged, AddressOf <sub_della_pagina> 
            Next
        End Sub
    End Module
    E in ogni pagina:
    codice:
    AddHandlerModule.AggiungiGestori(Me)
    
    Public Sub <sub_della_pagina>
        ......
    End Sub
    In pratica non so come dire nel modulo di andare a richiamamare allo scatanarsi dell'evento la funzione <sub_della_pagina>...
    :master:

    grazie

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    dovrebbe essere:

    codice:
    ...AddressOf DirectCast(Pagina,nomepagina).Sub_Pubblica_Della_Pagina


    :master:

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    L'ho fatto cosi' e funziona:

    PAGINA:
    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            For Each controllo As Control In PANNELLO.Controls
                If TypeOf controllo Is TextBox Then
                    AggiungiGestori.ADD(Me, controllo)
                End If
            Next
        End Sub
    MODULO:
    codice:
    Public Module AggiungiGestori
        Public Sub ADD(ByVal pagina As Page, ByVal tb As TextBox)
            AddHandler tb.TextChanged, AddressOf testocambiato
        End Sub
    
        Private Sub testocambiato(ByVal s As Object, ByVal e As EventArgs)
            HttpContext.Current.Response.Write("Nella Text hai scritto: " & DirectCast(s, TextBox).Text.ToString)
        End Sub
    End Module

  6. #6
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    si dovrebbe funzionare così... ... un'unica cosa:

    nella sub che gestisce l'evento che tu hai chiamato "testocambiato" ho un'istruzione che imposta il valore di una variabile nel ViewState

    codice:
    Me.ViewState("DataChanged") = "1"
    dentro ad un modulo non mi funziona... sai come fare o la sostituisco con una variabile in Session?

    grazie ancora per l'aiuto prezioso

  7. #7
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Noente... ho fatto delle prove ma la mia sub che gestisce l'evento deve stare proprio nella pagina, fa riferimento a troppi controlli della pagina e non posso passarli come parametro visto che l'AddressOf vuole "un metodo senza parentesi"...

    bah...

  8. #8
    Originariamente inviato da ghini76
    Noente... ho fatto delle prove ma la mia sub che gestisce l'evento deve stare proprio nella pagina, fa riferimento a troppi controlli della pagina e non posso passarli come parametro visto che l'AddressOf vuole "un metodo senza parentesi"...

    bah...
    Ciao,
    se ho ben capito quello che ti server, potresti usare i Delegate
    codice:
    Public Module Module1
    
        Public Delegate Sub myFP(ByVal sender As Object, ByVal e As EventArgs)
    
        Public Sub AddH(ByVal p As Page, ByRef mypFP As myFP)
    
            AddHandler DirectCast(p.FindControl("TextBox1"), TextBox).TextChanged, AddressOf mypFP.Invoke
    
        End Sub
    
    End Module
    
    ---Pagina con 2 textbox ed una label---
    Partial Class _Default
        Inherits System.Web.UI.Page
    
        Private mypFP As New Module1.myFP(AddressOf mySubAddH)
    
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Module1.AddH(Me, mypFP)
        End Sub
    
        Private Sub mySubAddH(ByVal sender As Object, ByVal e As EventArgs)
            Me.TextBox2.Text = TextBox1.Text & " - " & Me.Label1.Text
        End Sub
    End Class
    ... facci sapere

  9. #9
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Grazie!!!

    Si sono riuscito... e funziona perfettamente... mi ero letto qualcosa sui delegate... però non ero riuscito a far combaciare i pezzi... il vostro aiuto è stato alquanto illuminante...

    grazie ancora...

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.