Bonjour,
Dans le cadre de mon emploi, je travail actuellement sur une application de personnalisation d'écran. Cependant, je rencontre quelques problèmes que je n'arrive pas à résoudre...
Tout d'abord, je souhaite pouvoir déplacer les contrôles au clavier (avec les flèches directionnelles). Pour cela, j'ai fixé la propriété KeyPreview à true, et j'ai créer la routine suivante :
Cette routine fonctionne correctement à l'exception d'un bouton, qui se trouve à l'intérieur d'une groupbox... J'ai tenté de redéfinir processCmdKey comme ceci :
Code : 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
27
28
29 Private Sub gestionClavier(ByVal sender As Object, ByVal e As KeyEventArgs) Const PAS As Integer = 1 Dim parent As Control If _ctrlSelect IsNot Nothing Then parent = _ctrlSelect.Parent creerImage(parent) Select Case e.KeyCode Case Keys.Up _ctrlSelect.Location = New Point(_ctrlSelect.Location.X, _ctrlSelect.Location.Y - PAS) Case Keys.Right _ctrlSelect.Location = New Point(_ctrlSelect.Location.X + PAS, _ctrlSelect.Location.Y) Case Keys.Down _ctrlSelect.Location = New Point(_ctrlSelect.Location.X, _ctrlSelect.Location.Y + PAS) Case Keys.Left _ctrlSelect.Location = New Point(_ctrlSelect.Location.X - PAS, _ctrlSelect.Location.Y) Case Keys.Tab rechercheProchainFocus(Keys.Shift) End Select dessinnerSelection(_ctrlSelect) parent.Invalidate() End If e.Handled = True End Sub
Je passe bien dedans, mais le contrôle ne se déplace pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Protected Overrides Function processCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean Select Case keyData Case Keys.Left Return True Case Keys.Right Return True Case Keys.Up Return True Case Keys.Down Return True End Select Return MyBase.ProcessCmdKey(msg, keyData) End Function
Autre point que je ne sait pas résoudre : j'utilise l'API Win32 pour déplacer les contrôles (SendMessage et ReleaseCapture), cela fonctionne correctement, sauf pour le label. D'après ce que j'ai lu, celui-ci ne possède pas d'Handle, si ce n'est celui du formulaire où il est directement dessinner. Je souhaiterais savoir comment déplacer mon contrôle à l'aide des APIs ?
PS : connaissez vous des exemples de code pour une grille magnétique (style Visual Studio Designer ?)
Merci d'avance pour vos réponses,
Arnaud
Partager