IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Continuer le panel scroll en arrivant aux bords


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut Continuer le panel scroll en arrivant aux bords
    Bonsoir,

    dans un form, J'ai un panel en mode "autoscroll" sur lequel l'utilisateur peut faire glisser des controls (des labels en gros).

    Je voudrais que lorsque l'utilisateur approche le label d'un des bords du panel, celui ci scroll automatiquement dans la direction approprié, et si le panel est au maximum du scroll, qu'il grandisse, prolongeant le scroll presque indéfiniment...

    j'ai beau chercher, je ne trouve pas d'exemple probant; peut être dois-je utiliser un autre type de container que le panel?

    merci de votre aide,

    Zebrette.
    (petite image en pj)

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    Je vais peut être faire plus simple:

    Ou puis je trouver une documentation qui explique les mécanismes (properties, events, sub & function)et les objets (scroll bar, scrollable controls) relatifs à un scroll?

    zebrette

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    Alors en fait c'est plutôt directe la méthode que j'ai trouvé, je ne sais ni si c'est le meilleur moyen, ni si c'est dans les règles de l'art mais bon:


    prendre un form avec un Panel, Panel1
    AutoScroll = true
    AutoScrollMargin = (80,80)
    AllowDrop = true

    ajouter 3 boutons (pour le test)
    un bouton qui sera fix et deux qui pourront bouger sur le form;
    pour activer le drag des bouton on ajoute la sub:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Private DxDy As Point
        Private ClickedButton As Control
        Private Sub Buttons_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, Button2.MouseDown
            ClickedButton = sender
            DxDy = New Point(ClickedButton.PointToClient(MousePosition))
            DoDragDrop(ClickedButton, DragDropEffects.Move)
        End Sub
    maintenant dans le DragOver event du panel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Private Sub Panel1_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel1.DragOver
            ClickedButton.Location = Panel1.PointToClient(MousePosition) - DxDy
        End Sub
    ici on a deux bouton qui peuvent glisser sur le panel pendant le runtime; maintenant si on veut les déplacer au dela de la taille du panel en provoquant le scroll (mon problème de départ) il faut ajouter ses lignes dans le handler du DragOver

    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
     
        Private Sub Panel1_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel1.DragOver
            ClickedButton.Location = Panel1.PointToClient(MousePosition) - DxDy
     
    'Si la souris est au bord du panel:
    'attention ici il faut être dans la AutoScrollMargin
    'ie Panel1.ClientSize.Width - AutoScrollMargin
            If Panel1.PointToClient(MousePosition).X > Panel1.ClientSize.Width - 80 Then
                    'Incrément du horizontal scroll
                    Panel1.HorizontalScroll.Value += 20
                    'pause sur le thread sinon le scroll s'emballe très loin
                    Threading.Thread.Sleep(80)
            End If
     
        End Sub

    là dessus, libre à vous de rajouter le même code pour faire un 'scrollback' vers la gauche et scroll haut/bas
    Pour ma part j'ai aussi ajouté une marge plus petite plus prêt du bord où le scroll accélère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            If Panel1.PointToClient(MousePosition).X > Panel1.ClientSize.Width - 80 Then
                If Panel1.PointToClient(MousePosition).X > Panel1.ClientSize.Width - 30 Then
                    'Rapide
                    Panel1.HorizontalScroll.Value += 40
                    Threading.Thread.Sleep(50)
                Else
                    'Plus Lent
                    Panel1.HorizontalScroll.Value += 20
                    Threading.Thread.Sleep(80)
                End If
            End If
    bonne chance,
    Zebrette

    [Edit]
    une petite image d'illustration
    [/Edit]
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Merci, j'avais pensé à utiliser ça quelque part mais je n'avais pas eu le courage de chercher comment faire, ça pourra me servir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment colle le cadre aux bords de la page
    Par kanebody dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/05/2010, 19h35
  2. suis-je arrive aux limites du langage C ?
    Par elmcherqui dans le forum C
    Réponses: 3
    Dernier message: 13/10/2008, 17h58
  3. Boucle for, problème aux bords
    Par dword2add dans le forum C
    Réponses: 16
    Dernier message: 21/10/2006, 18h18
  4. rebond d'une balle aux bords de l'écran
    Par The_Duck dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/05/2006, 23h47
  5. [CSS] - une div aux bords arrondis ?
    Par 10-nice dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 23/09/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo