[VB.net 2005] Gestion du scroll via code
Bonjour à tous,
J'ai sur ma form un panel contenant un autre panel plus grand.
Le pnlContainer affiche donc deux scrollbar pour naviguer le panel inclus dans celui-ci.
Via la capture de l'évènement keyUp, je suis capable de déplacer mes scroll de x unités à chaque pression sur cette touche avec le code suivant:
Code:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Private Sub frm_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Select Case e.KeyCode
Case Keys.Up
If Me.pnlContainer.VerticalScroll.Value < 10 Then
Me.pnlContainer.VerticalScroll.Value = 0
Else
If Me.pnlContainer.VerticalScroll.Minimum >= Me.pnlContainer.VerticalScroll.Value - 10 Then
Me.pnlContainer.VerticalScroll.Value -= 10
Else
Me.pnlContainer.VerticalScroll.Value = 0
End If
End If
Case Keys.Down
If Me.pnlContainer.VerticalScroll.Maximum >= Me.pnlContainer.VerticalScroll.Value + 10 Then
Me.pnlContainer.VerticalScroll.Value += 10
Else
Me.pnlContainer.VerticalScroll.Value = Me.pnlContainer.VerticalScroll.Maximum
End If
Case Keys.Right
If Me.pnlContainer.HorizontalScroll.Maximum >= Me.pnlContainer.HorizontalScroll.Value + 10 Then
Me.pnlContainer.HorizontalScroll.Value += 10
Else
Me.pnlContainer.HorizontalScroll.Value = Me.pnlContainer.HorizontalScroll.Maximum
End If
Case Keys.Left
If Me.pnlContainer.HorizontalScroll.Value < 10 Then
Me.pnlContainer.HorizontalScroll.Value = 0
Else
If Me.pnlContainer.HorizontalScroll.Minimum >= Me.pnlContainer.HorizontalScroll.Value - 10 Then
Me.pnlContainer.HorizontalScroll.Value -= 10
Else
Me.pnlContainer.HorizontalScroll.Value = 0
End If
End If
Case Keys.Home
Me.pnlContainer.VerticalScroll.Value = 0
Me.pnlContainer.HorizontalScroll.Value = 0
Case Keys.End
Me.pnlContainer.VerticalScroll.Value = Me.pnlContainer.VerticalScroll.Maximum
Me.pnlContainer.HorizontalScroll.Value = Me.pnlContainer.HorizontalScroll.Maximum
Case Keys.PageUp
If Me.pnlContainer.VerticalScroll.Value < 25 Then
Me.pnlContainer.VerticalScroll.Value = 0
Else
If Me.pnlContainer.VerticalScroll.Minimum >= Me.pnlContainer.VerticalScroll.Value - 25 Then
Me.pnlContainer.VerticalScroll.Value -= 25
Else
Me.pnlContainer.VerticalScroll.Value = 0
End If
End If
Case Keys.PageDown
If Me.pnlContainer.VerticalScroll.Maximum >= Me.pnlContainer.VerticalScroll.Value + 25 Then
Me.pnlContainer.VerticalScroll.Value += 25
Else
Me.pnlContainer.VerticalScroll.Value = Me.pnlContainer.VerticalScroll.Maximum
End If
End Select
End Sub |
Ca fonctionne pas trop mal mais la barre de défilement ne réagitz pas à chaque pression sur une touche.
A priori il ne réagit qu'une fois sur deux.
Y a-t-il une autre méthode pour faire du scroll via mon code?
Les refresh, invalidate et autres update ne changent rien.
Ma seconde question est de savoir s'il est possible de capter les events pour les touches du pavé directionnel ailleurs que dans keyUp?
J'ai beau essayé, seul le keyUp réagit à ces touches.
Les autres fonctionnent niquel.
Mon but serait de pouvoir détecté et agir TANT QUE la touche up, down, right ou left est enfoncée.
Scroll continu en gros.
Sans vouloir abusé de vos connaissances, si quelqu'un aurait aussi sous la main un code pour capterle déplacement de souris au niveau OS et non au niveau de ma form çà m'aiderait.
EX: Dans photoshop, si je maintient ESPACE enfoncé et bouge ma souris, la vue défile.
Même si ma souris sors de la'ppli, la vue défile.
Même si je suis à la limite de mon écran et que je continue à déplacer la souris dans cette direction, la vue défile.
Sous VS.net, je ne capte que dans ma form.
Merci d'avance à tous les codeurs.