Intercettare il click di un bottone

martedì 03 aprile 2007 - 21.05

seven.7 Profilo | Junior Member

Salve volevo sapere in metodo per intercettare un click e restituire il valore del TAG. In pratica ho una funzione per molti bottoni che è sempre uguale ma varia il risultato a seconda del TAG. Mi aiutate????

alextyx Profilo | Expert

Se i bottoni sono, come penso, inseriti in fase di progettazione e non a Run Time da codice, una delle cose più semplici da fare è di chiamare la solita procedura da ciascuno dei gestori di evento dei bottoni. Potresti anche usare un solo gestore di evento per tutti i ckick dei vari bottoni, ma qualche volta il numero di righe della dichiarazione della procedura, se i bottoni sono molti, rischia di diventare anti estetico.
Comunque, la procedura che dovresti chiamare, dovrebbe accettare come parametro il 'sender' dell'evento click, che sarà un button, ricavarne il tag e procedere di conseguenza, per esempio con un 'select case'.
In prima battuta questa è l'indicazione che mi sento di darti. Resto a disposizione per eventuali chiarimenti necessari.

seven.7 Profilo | Junior Member

Private Sub Button_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_1.Click
Dim i As Integer = CType(Me.Button_1.Tag.ToString, Integer)
Me.MostraInfoAdd(i)
End Sub

poichè sono molti bottoni mi servirebbe qualcosa per eliminare il me.button_1.tag... e rendere l'evento universale diciamo... mi potresti aiutare a fare in modo che tale valore venga preso dal nome della funzione stessa (da handles button_1.click). In questo modo con il semplice copia incolla definisco tutti gli eventi click dei bottoni...thanks

alextyx Profilo | Expert

Basta scrivere sender al posto di button1,button2, ecc...
Esempio:

Dim i As Integer = Convert.toint32(ctype(sender,button).Tag)
Me.MostraInfoAdd(i)
End Sub

Devi solo operare il casting del generico oggetto 'sender' in 'button', utilizzando ctype e poi puoi richiamarne il TAG. Il sender dell'evento, in effetti, altri non è che il pulsante su cui è stato cliccato. Ci sarebbe anche la possibilità di utilizzare la stessa procedura per gestire gli eventi provenienti da pulsanti diversi, che comunque verrebbero riconosciuti in quanto ogni volta si tratterebbe di un 'sender' differente. Per farlo, basterebbe aggiungere altri pulsanti in coda alla clausola handles. Il problema, come accennavo è se i pulsanti sono una decina o più e allora diventa veramente bruttino a vedersi, ma però si può fare. Io, fossi in te, scriverei qualcosa del genere:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
Dim Risultato As Integer
If Not IsNothing(CType(sender, Button).Tag) Then
Integer.TryParse(CType(sender, Button).Tag.ToString, Risultato)
End If

ovviamente, dopo il 'Handles Button1.Click, Button2.Click', puoi continuare con button3,button4, ecc....

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5