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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 477
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 Wallace,

    Oui mais ce n'est pas un UserControl qu'on dépose sur le Form depuis le projet ce sont des UserControl instanciés dynamiquement (dans le programme en cours d'exécution) dès qu'on appuie sur le bouton (Ajouter Ligne).
    Oui et c'est bien ainsi que je vois les choses ..., mais cela fait sans doute beaucoup de "nouveautés" à mettre en œuvre en même temps pour notre ami Rocketter ...

    Bonne soirée Wallace,


  4. #4
    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 Phil Rob Voir le message
    Bonsoir Wallace,
    Oui et c'est bien ainsi que je vois les choses ...,
    Désolé je croyais qu'on était pas sur la même longueur d'onde...

    mais cela fait sans doute beaucoup de "nouveautés" à mettre en œuvre en même temps pour notre ami Rocketter ...
    Effectivement, avec un peu de recul je comprends.


    Bonne continuation Rocketter.

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    le seul moyen de résoudre ce problème c'est :
    1/ mettre tes controls de saisie dans un Panel que tu ajoutera à ton Form

    2/ de rajouter ce code à ton Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.Panel2.AutoSize = True
            Me.Panel2.AutoScroll = False
            Me.AutoScroll = True
        End Sub
    ton Form aura alors pour fonction de "scroller" ...

    bon code.....

  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
    Mon pb à l'origine de ce topic est résolu en fait, j'ai suivi la solution de Phil Rob qui correspond tout à fait à ma problématique. Utiliser un UserControl m'aurait fait économiser des lignes de code ... à condition de connaitre cet outil, ce qui n'était pas mon cas jusqu'alors.
    Par contre j'étais reparti sur une autre question, ici : https://www.developpez.net/forums/d1.../#post10923204

    Mais bon j'aurais têt du créer un autre topic dédié. Je vais mettre celui-ci en résolu, et merci de votre aide en tout cas.

  7. #7
    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

  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
    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.

  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,

    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

  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
    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

  11. #11
    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 : 440
Taille : 74,3 Ko

    ChProject2.zip

    Enjoy....

  12. #12
    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éé ?

  13. #13
    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 ...

  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
    Bonsoir Phil,

    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.
    Il n'y a aucun problème lorsqu'on navigue avec la scrollbar du TableLayoutPanel..... les userControl sont instanciés puis placés à la collection de contrôles dans le TableLayoutPanel ainsi on ne se soucis pas de leur positionnement et surtout ils ne perdent absolument pas leur propriétés .Location. (regardes le projet exemple que j'ai proposé tu comprendras mieux )
    Mais de toute façon OP n'a pas opté pour la ré-utilisabilité du UserControl et de fait il a certainement mis en place ta solution visant à désactiver ponctuellement le scroll, pour ça que je disais tanpis. Et aussi parce que dans ce cas précis la création d'un UserControl prends tout son sens..... car ça évite de devoir s'encombrer de valeurs de positionnement de contrôles et surtout ça évite de devoir mettre en place des routines de recherche de contrôles comme ce qu'à énoncé OP qq messages plus haut....

    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.
    Oui mais ce n'est pas un UserControl qu'on dépose sur le Form depuis le projet ce sont des UserControl instanciés dynamiquement (dans le programme en cours d'exécution) dès qu'on appuie sur le bouton (Ajouter Ligne).

    Cdlt ami Phil.

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

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, 18h41
  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, 09h17
  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, 16h46
  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, 17h10
  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, 16h51

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