Intercettare l'evento click su un winform

venerdì 14 novembre 2008 - 11.07

andreapavia Profilo | Senior Member

buon giorno,
dovrei intercettare l'evento click su un winform per capire se il contrololo selezionato e' una texbox oppure no....

con questo metodo intercetto il controllo e funziona correttamente

******************************************
Private Function GetFocusedControl(ByVal Controls As System.Windows.Forms.Control.ControlCollection) As System.Windows.Forms.Control
' store focused control&
For Each clsControl As System.Windows.Forms.Control In Controls
If clsControl.Focused Then
Return clsControl
End If
If clsControl.ContainsFocus Then
If (clsControl.Controls.Count = 0) Then
Return clsControl
Else
Return GetFocusedControl(clsControl.Controls)
End If
End If
Next
' no focus&
Return Nothing
End Function
*************************************************************************

ma qui non ci entra mai

*********************************************
Private Sub main_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick


Dim contSel As System.Windows.Forms.Control

contSel = GetFocusedControl(MyBase.Controls)
Dim ff As String
ff = contSel.ToString

End Sub

*************************************************

perche' non ci entra,, dove sbaglio????


grazie 1000

0v3rCl0ck Profilo | Guru

>buon giorno,

Ciao

>dovrei intercettare l'evento click su un winform per capire se
>il contrololo selezionato e' una texbox oppure no....
>
>
>perche' non ci entra,, dove sbaglio????
>

Io aggiungerei nel costruttore della form le istruzioni per agganciare l'evento MouseClick, di tutti i controlli presenti sul form stesso, ad una stessa funzione.

Prova a vedere questo esempio che ti ho preparato in base al tuo codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>
>grazie 1000
>

Enjoy It


- Michael -
http://blogs.dotnethell.it/Regulator/

andreapavia Profilo | Senior Member

grazie 1000 ma.... non sono partico di winform...
ma... una domanda... perche' non entra in questo evento?


Private Sub main_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
bla bla bla
End Sub

Public Sub New()

' This call is required by the Windows Form Designer.
InitializeComponent()

' Aggiungo l'evento MouseClick a tutti i controlli presenti sul form
For Each ctrl As Control In Me.Controls
AddHandler ctrl.MouseClick, AddressOf _MouseClick
Next

End Sub



e poi

questa parte di codice dove la scrivo?????


io ho una form sola... perdona la mia ignoranza ma di winform non capisco nulla...

0v3rCl0ck Profilo | Guru

>grazie 1000 ma.... non sono partico di winform...
>
>Public Sub New()
>
> ' This call is required by the Windows Form Designer.
> InitializeComponent()
>
>' Aggiungo l'evento MouseClick a tutti i controlli presenti sul
>form
> For Each ctrl As Control In Me.Controls
> AddHandler ctrl.MouseClick, AddressOf _MouseClick
> Next
>
>End Sub
>
>
>questa parte di codice dove la scrivo?????

Quel codice deve essere messo nel codice della form, il dove non ha importanza, di solito si mette in alto. Le windows form, .net, le tratta come vere e proprie classi. Quel codice non è nient'altro che il codice del costruttore di tale classe windows.form. Ogni classe ha sempre un costruttore, che di default esegue le operazioni specificate nel costruttore base della classe, nel nostro caso specifico eseguirà di default il costruttore della classe System.Windows.Forms.Form. Tu puoi specificare un tuo costruttore per eseguire operazioni particolari nel momento in cui la classe viene creata. Ed è esattamente quello che abbiamo fatto con il codice sopra scritto, dove per prima cosa viene lanciato l'inizializzazione dei vari oggetti presenti sulla form, e poi abbiamo agganciato tutti gli eventi di tali oggetti, all'evento MouseClick.

Enjoy It

- Michael -
http://blogs.dotnethell.it/Regulator/

andreapavia Profilo | Senior Member

grazie 1000 davvero...


ma con punti di debug
qui non entra
Private Sub _MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Private Sub main_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick

ti riporto cio' che ho scritto... sicuramente ho fatto delle fesserie....

grazie 1000 e scusami ma non ho mai fatto winform

*************************
miei imports

Public Class main

Public Sub New()

' This call is required by the Windows Form Designer.
InitializeComponent()

' Aggiungo l'evento MouseClick a tutti i controlli presenti sul form
For Each ctrl As Control In Me.Controls
AddHandler ctrl.MouseClick, AddressOf _MouseClick
Next

End Sub

Private Sub _MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

Dim contSel As System.Windows.Forms.Control

contSel = GetFocusedControl(MyBase.Controls)
Dim ff As String
ff = contSel.ToString

End Sub


Private Sub main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub
Private Function GetFocusedControl(ByVal Controls As System.Windows.Forms.Control.ControlCollection) As System.Windows.Forms.Control
' store focused control&
For Each clsControl As System.Windows.Forms.Control In Controls
If clsControl.Focused Then
Return clsControl
End If
If clsControl.ContainsFocus Then
If (clsControl.Controls.Count = 0) Then
Return clsControl
Else
Return GetFocusedControl(clsControl.Controls)
End If
End If
Next
' no focus&
Return Nothing
End Function



Private Sub main_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick


Dim contSel As System.Windows.Forms.Control

contSel = GetFocusedControl(MyBase.Controls)
Dim ff As String
ff = contSel.ToString


End Sub

0v3rCl0ck Profilo | Guru

Questo codice, rimuovilo, perchè sulla form non ti serve intercettare il click del mouse, solo sui controlli inseriti nel form.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

E' strano che non ti entri nelle funzioni. A questo punto ti chiedo di allegarmi il progetto per intero, se puoi...altrimenti fammene uno di esempio, cosichè possa capire come mai non ti funziona.


- Michael -
http://blogs.dotnethell.it/Regulator/

andreapavia Profilo | Senior Member

scusami....

se non metto sul mouse click

Handles Me.MouseClick
e' dura che funzioni.... va alla grandissima il tuo metodo....

ma mi resta il dubbio sul perche' non entri nell'evento main click....

comqunue sia ti ringrazio davvero!!!!!!!!!!!!!!!!!!

0v3rCl0ck Profilo | Guru

Però aspetta, su questa funzione:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

non devi mettere nulla perchè l'evento è già agganciato nel costruttore:

' Aggiungo l'evento MouseClick a tutti i controlli presenti sul form For Each ctrl As Control In Me.Controls AddHandler ctrl.MouseClick, AddressOf _MouseClick Next

Questa funzione:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Non ti serve, perchè con le istruzioni messe nel costruttore e la funzione "_MouseClick" ogni controllo sulla form eseguirà tale funzione per ogni evento MouseClick e saprai con certezza quale controllo hai cliccato per ultimo.

Se hai risolto il problema, accetta una risposta che chiudiamo il thread

Enjoy It


- Michael -
http://blogs.dotnethell.it/Regulator/

andreapavia Profilo | Senior Member

ok e' perfetto chiudilo pure...


grazie 1000 davvero!!!!!!!!

ps
anche se mi fa abbastanza innervosire che un evento click come quello su un form non vada....
e' proprio vero che mamma microsoft se frega ormai dei winform... ogni versione e' sempre peggio.... x la serie ti vendo la macchina con ruote ma senza gomme intanto prova a fare un giro e guarda se funziona....

0v3rCl0ck Profilo | Guru

>ok e' perfetto chiudilo pure...

Sei tu che devi accettare una delle mie risposte, dovresti vedere su una delle mie risposte, un pulsante con scritto "accetta". In quel modo il thread si chiude.

Grazie
Alla prossima...
Ciaoooo
- Michael -
http://blogs.dotnethell.it/Regulator/

andreapavia Profilo | Senior Member

OPPSSSSS SCUSAMI... SORRY....

0v3rCl0ck Profilo | Guru

>OPPSSSSS SCUSAMI... SORRY....

Benissimo

Ciao

- Michael -
http://blogs.dotnethell.it/Regulator/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5