En utilisant le code ci-dessous:Ouvrez un formulaire avec Form.Show: le premier clic de la souris est ignoré. Winforms, .Net
Private Sub ShowDropDown()
Using f As New DropDownForm
f.Visible = True
Do While f.Visible
Application.DoEvents()
// Call to not take up 100% resources
Loop
End Using
End Sub
Si la méthode ShowDropDown est appelée par autre chose qu'un bouton clic, puis le premier clic de souris dans la DropDownForm est ignorée. Ainsi, s'il a été appelé à la suite d'un clic PictureBox ou d'un clic sur un formulaire, il est ignoré.
je peux résoudre le problème en procédant comme suit:
Private Sub ShowDropDown()
Using f As New DropDownForm
f.Visible = True
Dim capture As IntPtr = GetCapture()
If (capture <> IntPtr.Zero) Then
SendMessage(New HandleRef(Nothing, capture), &H1F, IntPtr.Zero, IntPtr.Zero)
ReleaseCapture()
End If
Do While f.Visible
Application.DoEvents()
Loop
End Using
End Sub
Ce fut une supposition, après avoir regardé la méthode Form.ShowDialog dans le réflecteur.
Ma question est la suivante: y a-t-il un appel géré que je peux faire pour obtenir le même résultat, et que fait un clic sur un bouton pour que les autres ne le fassent pas? ETA: Le problème ne se produit pas si j'ouvre le formulaire à l'aide d'une clé.
Pour votre information - Vous pouvez utiliser Thread.Sleep (0) comme alternative à Application.DoEvents() pour arrêter la CPU 100% ... Application.DoEvents() pourrait vous donner des effets secondaires que vous faites ne veut pas. –
Je ne sais pas ce qui est mieux, mais j'utilise Application.DoEvents(), suivi de MsgWaitForMultipleObjectsEx (0, IntPtr.Zero, 250, & HFF, 4). C'est ainsi que le PropertyGrid le gère. – Jules