Bonjour,
Généralement je trouve une réponse à mes problèmes sur ce forum (ou d'autres) mais aujourd'hui je suis dans l'impasse je viens donc en quêtes de quelques réponse de la part de spécialistes wpf/forms.
J'ai un form dans lequel il y a un datagridview lié à une base de données SQL. Lors d'un clique sur une cellule je gère l'évenement CellClick et créer dans le code un ElementHost qui affiche un UserControl WPF.
Cet UserControl est enfaite un popup destiné à donner plus d'informations sur la cellule cliqué.
Ce dernier s'affiche et lorsqu'on le survole avec la souris l'évenement MouseEnter se déclenche et l'UserControl reste affiché tant que la souris est à l'interieur.
Dès la sortie de la souris, l'évenement MouseLeave se déclenche et cache puis supprime l'UserControl.
Voila le fonctionnement dans le debugger de VS 2010.
Mon soucis est que lorsque que je génère mon projet que je le teste en dehors de VS 2010 les évenements MouseEnter et MouseLeave ne se déclenchent pas quand l'UserControl apparait et que je le survole.
Malgrès de multiple recherche je ne trouve pas de solution à mon problème
Voici le code de l'UserControl :
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Imports System.Threading Imports System.Windows.Data Public Class UserControlUtil Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded StackPanel1.DataContext = GPIadmin.DataSet1.Utilisateurs Canvas1.DataContext = GPIadmin.DataSet1.Utilisateurs If CellValue <> "" Then Dim myView As BindingListCollectionView myView = CType(CollectionViewSource.GetDefaultView(GPIadmin.DataSet1.Utilisateurs), BindingListCollectionView) myView.CustomFilter = "Nom_utilisateur = '" & CellValue & "'" End If End Sub Private Sub UserControl_MouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles MyBase.MouseEnter OnUcImpri = True 'Variable public dans un module End Sub Private Sub UserControl_MouseLeave(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles MyBase.MouseLeave OnUcImpri = False MyElementHost.Hide() GPIadmin.Controls.Remove(MyElementHost) NoCellClick = False End Sub
Il faut savoir que je lance un thread séparé pour laisser le temps de survoler l'UserControl :
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Private Sub DataGridView2_CellMouseLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellMouseLeave If NoCellClick = True Then 'on ne lance le thread pour quitter le pop up que si on a cliqué une cellule Thread.Sleep(1000) 'tempo pour laisser le temps a l'utilisateur de survoler le pop up MyThread = New Thread(AddressOf HideElementHost) MyThread.Name = "ThreadHideElementHost" MyThread.SetApartmentState(Threading.ApartmentState.STA) MyThread.Start() End If End Sub Sub HideElementHost() If MyElementHost.InvokeRequired = True Then Dim del As New HideElementHostDelegate(AddressOf HideElementHost) Try Me.Invoke(del, New Object() {}) Catch ex As Exception End Try Else If OnUcImpri = False And NoCellClick = True Then MyElementHost.Hide() Me.Controls.Remove(MyElementHost) NoCellClick = False End If End If End Sub
Partager