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 :

Mouvement d'un ensemble de controle


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut Mouvement d'un ensemble de controle
    Bonsoir,

    Je bouge un ensemble de controles avec un evenement Me.KeyDown.
    Je voudrais arreter le mouvement de cet ensemble de controles lorsque je depasse une certaine limite.

    Bref, un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select Case e.KeyCode
             Case Keys.Up
                     For Each ctrl As Control In mainPanel.Controls
                            ctrl.Location = New Point(ctrl.Left, ctrl.Top - 2)
                     Next
                     If ctrl.Location.Y (d'au moins un controle)< 0 Then
                            On bloque l'ensemble.
                            For Each ctrl As Control In mainPanel.Controls
                                   ctrl.Location = New Point(ctrl.Left, ctrl.Top + 2)
                            Next
                     EndIf
    ...
    Bon, bien sur, ce code est minable; mais en fait, je cherche une certaine methodologie pour accomplir cette idee (avec un seul controle a gerer, c'est plus facile).
    Une idee ou une piste a suivre?

    En fait, en posant la question, j'ai trouve ce moyen qui semble marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Case Keys.Up
            Dim fOut As Boolean = False
            For Each ctrl As Control In mainPanel.Controls
                            ctrl.Location = New Point(ctrl.Left, ctrl.Top - 2)
                            If ctrl.Location.Y < 0 Then fOut = True
            Next
            If fOut = True Then
                      For Each ctrl As Control In mainPanel.Controls
                                ctrl.Location = New Point(ctrl.Left, ctrl.Top + 2)
                      Next
            End If
    Mais, si vous avez une meilleure idee, je suis preneur.

    A+
    JLuc01

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Case e.KeyCode
      Case Keys.Up
        For Each ctrl As Control In mainPanel.Controls
           If ctrl.Location.Y >=2   then
               ctrl.Location = New Point(ctrl.Left, ctrl.Top - 2)
            end if             
        Next

  3. #3
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut
    Salut Shayw,

    Bien essaye, mais cela ne fait pas la meme chose.
    Car tous les controles depassant la limite autorisee s'arretent (OK), mais pas ceux qui sont encore dans la zone acceptable.
    En bref, il y a accumulation de tous les controles jusqu'a la limite du haut.

    Merci quand meme,
    A+
    JLuc01

  4. #4
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut
    Re-bonjour,

    En fait , il y a un leger changement dans mon objectif, meme si mon code initial va dans le bon sens.

    1- Au depart, jai un Rectangle sur un Panel principal et dans ce rectangle plusieurs Controles.
    2- Je peux zoomer ces controles, donc avec possibilitee de sortie du Panel principal, direction Right et Bottom (Le Top et Left ne bougeant pas lors du zoom).
    3- Je veux pouvoir bouger l'ensemble de ces controles (après zoom) de facon a ce qu'il n'y ait pas de vide dans ce Rectangle. C'est a dire (lors du mouvement vers le bas) que le Controle se situant le plus haut arrete le mouvement de l'ensemble des controles lorsqu'il est a la limite haute du Rectangle. Meme logique pour le bas.

    Voici mon code pour l'instant:
    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
     
                    Case Keys.Up
                        Dim flag As Boolean = False
                        Dim i As Integer = 0
                        For Each ctrl As Control In mainPanel.Controls
                            ctrl.Location = New Point(ctrl.Left, ctrl.Top - 2)
                            i = i + 1
                            If ctrl.Location.Y + ctrl.Height < 422 And i = mainPanel.Controls.Count - 1 Then flag = True
                        Next
                        If flag = True Then
                            For Each ctrl As Control In mainPanel.Controls
                                ctrl.Location = New Point(ctrl.Left, ctrl.Top + 2)
                            Next
                        End If
                        e.Handled = True
                    Case Keys.Down
                        Dim flag As Boolean = False
                        For Each ctrl As Control In mainPanel.Controls
                            ctrl.Location = New Point(ctrl.Left, ctrl.Top + 2)
                            If ctrl.Location.Y > 22 Then flag = True
                        Next
                        If flag = True Then
                            For Each ctrl As Control In mainPanel.Controls
                                ctrl.Location = New Point(ctrl.Left, ctrl.Top - 2)
                            Next
                        End If
                        e.Handled = True
    Bon, ca marche a moitie avec des bugs.
    Bref, si on peut m'aider avec ce code ou une idee differente, ce serait genial.
    Sinon, après une bonne nuit de sommeil, j'y verrais peut-etre plus clair.

    A+
    JLuc01

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

Discussions similaires

  1. [WD-2007] Modifier les propriétés d'un ensemble de controle
    Par ronibalbo dans le forum VBA Word
    Réponses: 2
    Dernier message: 18/09/2014, 16h44
  2. boucle sur un ensemble de controls
    Par jasonpolakow dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/04/2011, 13h26
  3. Tester l'ensemble des valeurs d'un controle
    Par jaq dans le forum VBA Access
    Réponses: 1
    Dernier message: 26/08/2008, 13h59
  4. Parcourir l'ensemble de control
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/01/2008, 10h43
  5. Procédure Identique sur Ensemble de Controls Perso
    Par Danyel dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/08/2007, 12h24

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