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 :

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
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
 
    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
Je passe bien dedans, mais le contrôle ne se déplace pas...

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