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 :

Problème avec propriété AutoScroll


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut Problème avec propriété AutoScroll
    Bonjour à tous,

    je développe actuellement un programme permettant de tracer l'administration de stupéfiant dans un service de soins (je travaille dans un CH). Dans mon programme l'utilisateur a la possibilité d'ajouter plusieurs lignes via le bouton "+" ; les lignes s'ajoutent les unes en dessous des autres selon un intervalle régulier, sauf ... lorsque l'on touche au scroll vertical :

    Nom : pb scroll.png
Affichages : 526
Taille : 26,0 Ko

    Les 5 premières lignes sont ok, sauf les deux dernières, où j'ai touché au scroll vertical.

    Par contre lorsque la propriété AutoScroll est à false, je n'ai pas ce souci, tout s'ajoute de façon correct mais cela ne me convient pas, il n'y a qu'avec un scroll que j'ai la garantie que l'utilisateur pourra consulter toutes ses données, indépendamment de la taille de son écran.

    Savez-vous comment je pourrais résoudre ce problème ?

    Merci d'avance de vos réponses.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Difficile de cibler le problème alors qu'on ne sait pas comment tu gères cet ajout de lignes........

    Visiblement il y a un Timer qui tourne derrière tout ça ....... et les valeurs de positionnement de tes contrôles (.Location) ne sont pas correctement mises à jour lorsque tu Scroll.....

    Brefff ... on veut du code .... du code .... du code ..... pour comprendre et t'aider

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Une piste ...

    Avec un Form, ou un Panel, les ajouts conservent leur régularité si AutoScroll est désactivé juste avant l'ajout et réactivé juste après.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Me.AutoScroll = False  ' désactiver
            ' les codes d'ajouts d'objets 
            ' ...
            ' Me.Controls.Add(LeNouvelObjet)
            ' ...
            Me.AutoScroll = True  ' réactiver
    Bonne nuit

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Voici un exemple de code pour un des contrôle figurant sur une ligne, non il n'y a pas de timer sinon.

    La première ligne s'affiche au lancement du programme, le user saisit ses données, il clique sur +, une nouvelle ligne apparait à la coordonnée y 173, ensuite à chaque clic sur "+", les lignes apparaissent à y + 43 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    y = 173
     
      'Création du contrôle TextBox qui contiendra le stock restant du médicament
                TxtStock = New System.Windows.Forms.TextBox
                Me.Controls.Add(TxtStock)
                With TxtStock
                    .Location = New System.Drawing.Point(1036, y)
                    .Size = New Size(83, 20)
                    .Name = "Txt_Stock" & (indice)
                End With
     
    y = y + 43
    Pas bête ton idée Phil Rob, je vais tester ça et vous dirais.

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Bon effectivement je croyais que ceci correspondait à un Timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    selon un intervalle régulier
    Breff maintenant que je comprends ton projet tu dois bien te faire chi** à calculer le positionnement de tes contrôles ....... et tout le tutti.... pourquoi n'as-tu pas créer un UserControl et un contrôle de type FlowLayoutPanel la gestion en serait d'autant plus simple. Regardes un exemple en pj :

    ChProject.zip

    PS : exemple à optimiser bien entendu .....

    A+ et bon codage

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    j'avoue oui, je me suis mal exprimé

    pourquoi n'as-tu pas créer un UserControl et un contrôle de type FlowLayoutPanel
    tout simplement parce que je ne connais pas mais merci de l'info je vais regarder ça

  7. #7
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Voici l'exemple du projet chProject agrémenté pour que tu puisses aborder les notions de l’événementiel :

    Nom : UC.jpg
Affichages : 486
Taille : 74,3 Ko

    ChProject2.zip

    Enjoy....

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Salut Wallace,

    j'ai pris le code de Phil pour solutionner mon pb, mais ton approche est intéressante. Par contre tu fais appel à des notions que je découvre complètement, ça à l'air plus puissant et moins artisanal que ce que j'utilise, il faut que je creuse le sujet et me documente sur le FlowLayoutPanel.
    Dans ton code la classe UserComponents est une classe qui s'est définit de façon auto ou c'est toi qui l'a créé ?

  9. #9
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Citation Envoyé par rocketter Voir le message
    ...... UserComponents est une classe qui s'est définit de façon auto ou c'est toi qui l'a créé ?

    C'est moi qui l'ai créée en la faisant hériter de la classe UserControl. Tu as 2 possibilités pour créer un UserControl :

    - Soit tu ajoutes un nouvel élément et tu sélectionnes "Contrôle Utilisateur" :

    Nom : UC0.jpg
Affichages : 471
Taille : 106,5 Ko

    Nom : UC1.jpg
Affichages : 479
Taille : 100,4 Ko

    - soit tu ajoutes un nouvel élément et tu sélectionnes "Classe" et tu remplies le code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Class UserComponents
        Inherits UserControl
     
        Public Sub New
            InitlializeComponent()
        End Sub
     
    End Class
    ---> Ensuite tu ouvres cette classe (UserComponents) en mode Design et tu positionnes tes contrôles (TextBox, NumerciUpDown, Button, ...etc...) dessus :

    Nom : UC2.jpg
Affichages : 467
Taille : 109,0 Ko

    En revanche, un UserControl est un contrôle que tu personnalises toi-même, il est réutilisable et il permet ainsi d'éviter de multiplier les mêmes bouts de code dans ton projet.
    Le FlowLayoutControl est un simple contrôle de type Container grâce auquel tu vas pouvoir ajouter n'importe quel autre contrôle ou composant dedans. Ainsi tu vas pouvoir retrouver aisément tes composants et surtout les agencer comme bon te semble.

    ++

  10. #10
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Merci de l'info c'est un peu plus clair, va falloir que j'expérimente maintenant

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Est-il possible que le FlowLayoutPanel reste visible malgré un scroll vertical sur ma form, parent du FlowLayoutPanel ?

  12. #12
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par rocketter Voir le message
    Est-il possible que le FlowLayoutPanel reste visible malgré un scroll vertical sur ma form, parent du FlowLayoutPanel ?
    Envoi un exemple de projet que je puisse comprendre l'agencement de tes controles.... parce que là j'ai du mal à visualiser

    ++

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Malheureusement je n'ai pas trop le temps de bricoler un exemple pour le moment, mais avec des captures d'écran tu devrais comprendre :

    En fait j'aimerais que la partie entourée de rouge ci dessous :
    Nom : 1.png
Affichages : 451
Taille : 42,6 Ko

    continue de rester visible, même lorsque mon scroll vertical atteint le bas de la form, ce qui n'est pas le cas actuellement :
    Nom : 2.png
Affichages : 441
Taille : 44,8 Ko

    Je vois qu'il y a bien la solution du splicontainer, mais la majorité de mes contrôles sont créés dynamiquement, cela m'obligerait donc à réécrire une bonne partie de mon code, et je ne souhaite pas cela.
    Donc voilà je ne sais pas s'il y a une solution à mon problème.

    Merci à toi en tout cas de continuer de suivre mon topic :-)

  14. #14
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Il faut que tu utilises un contrôle "SplitContainer". Tu le paramètres de manière à avoir 2 Panel (Panel1 et Panel2) avec une division sur l'axe horizontal.

    Tu places ton TableLayoutPanel sur le Panel2 et les autres contrôles de saisie sur le Panel1.

    Voilà le scroll est dédié uniquement à ton TLP.

    ++

  15. #15
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Oui mais comme j'ai dit, le splitcontainer ne me convient pas car mes contrôles sont créées dynamiquement, en gros pour un textbox actuellement dans mon programme, accessible ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.controls("txt_patient")
    si ce textbox est contenu dans un splitcontainer, laissé le code ci-dessus entrainera une erreur, pour l'atteindre il faudra écrire à la place qqch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach ( Control c in sc.Panel1.Controls ) 
    {
       //   ...
    }
    Cela oblige donc à réécrire une bonne partie de mon code.

    Je pensais qu'il y avait peut-être une solution sans splitcontainer mais cela n'est peut-être pas possible.

  16. #16
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Mais Le controle TxbPatient est disponible directement depuis ton Form pourtant ???
    Depuis quel endroit de ton projet souhaites-tu accéder à ces controles de ton Form exactement ?
    (si c'est depuis une autre classe il faut passer ton Form en argument dans le constructeur de ta classe pour pouvoir y accéder)

  17. #17
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Mais Le controle TxbPatient est disponible directement depuis ton Form pourtant ???
    Oui

    Depuis quel endroit de ton projet souhaites-tu accéder à ces controles de ton Form exactement ?
    (si c'est depuis une autre classe il faut passer ton Form en argument dans le constructeur de ta classe pour pouvoir y accéder)
    Non je reste bien dans la même classe.

    Après je n'utilise pas de UserControl, en gros j'ai ma form et dedans j'y place directement mes textbox, listbox, etc ...

  18. #18
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par rocketter Voir le message

    Après je n'utilise pas de UserControl, en gros j'ai ma form et dedans j'y place directement mes textbox, listbox, etc ...
    OK tanpis ......

  19. #19
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Par défaut
    Sans UserControl c'est mort alors ?

  20. #20
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour à tous,

    Après avoir suggéré une solution au début de cette discussion, je ne l'ai plus vraiment suive ...
    J'ai juste vu la proposition d'utiliser un UserControl.
    C'est une bonne idée pour simplifier le calcul des positions des composants : cela permet de ne calculer qu'une position, celle du UserForm. Les composants qu'il contient suivent automatiquement.
    Mais le UserControl n'ôtera pas le problème initial (irrégularité dans la dispositions des composants sur le Form une fois le Scroll actif). Je ne crois pas non plus au TableLayoutPanel pour résoudre ce problème, quand le Scroll va s'activer, il y aura aussi des irrégularités.

    Franchement, ça vaut la peine de créer un UserControl, ce n'est finalement qu'un "Form" qui est instancié à la demande, autant de fois que souhaité, et placé là où on veut.
    Dans ton cas, il suffit probablement de lui désigner sa position Top, c'est-à-dire le Top dans le ClientSize du Form, auquel est ajouté la valeur Height du UserForm, multipliés par le nombre de UserForm déjà instanciés (cela donne 0 * Height pour le 1er, 1 * Height pour le 2ème, ...).

    Et bien sûr, désactiver l'AutoScroll avant l’instanciation et le réactiver ensuite.

    J'espère vous avoir apporté matière à réflexion ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2013] Problème avec propriété Column
    Par sami0701 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/12/2015, 19h41
  2. [XL-2007] Problème avec propriété VISIBLE
    Par lucienpaye dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/02/2014, 10h17
  3. Problème avec propriété CSS 'display'
    Par MAfiO_o dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 20/04/2009, 17h46
  4. [VB.NET] ListView Problème avec propriété View à 'List'
    Par elkidos dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/08/2006, 18h10
  5. [VB6] probléme avec propriété ActiveX
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/06/2006, 17h51

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