Comment puis-je m'assurer que les barres de défilement ne chevauchent pas le contenu ?

StackOverflow https://stackoverflow.com/questions/26721

  •  09-06-2019
  •  | 
  •  

Question

Lors de la création de contrôles utilisateur déroulants avec .NET et WinForms, j'ai rencontré à plusieurs reprises des situations dans lesquelles, par exemple, une barre de défilement verticale apparaît, chevauchant le contenu du contrôle, ce qui rend également nécessaire une barre de défilement horizontale.Idéalement, le contenu devrait être légèrement réduit pour laisser de la place à la barre de défilement verticale.

Ma solution actuelle a consisté simplement à garder mes contrôles en dehors des 40 pixels les plus à droite, afin que la barre de défilement verticale prenne le dessus.Puisqu'il s'agit toujours effectivement d'un espace client pour le contrôle, la barre de défilement horizontale apparaît toujours lorsqu'elle est recouverte par la barre de défilement verticale, même si aucun contrôle n'est masqué.Mais au moins, l'utilisateur n'a pas réellement besoin de utiliser la barre de défilement horizontale qui apparaît.

Existe-t-il une meilleure façon de faire fonctionner tout cela ?Un moyen d'empêcher les barres de défilement inutiles et indésirables d'apparaître ?

Était-ce utile?

La solution

Vous devrez redimensionner légèrement vos contrôles pour s’adapter à la largeur de la barre de défilement verticale.Une façon d'y parvenir est réalisée grâce à l'amarrage.Plutôt que de simplement supprimer des contrôles sur le formulaire, vous devrez jouer un peu avec les panneaux, le remplissage, le dimensionnement min/max et l'ancrage.

Voici un exemple de code que vous pouvez placer derrière un nouveau Form1 vierge.Redimensionnez le formulaire, dans le concepteur ou au moment de l'exécution et vous verrez que la barre de défilement horizontale n'est pas affichée et que les champs ne se chevauchent pas.J'ai également donné aux champs une largeur maximale pour faire bonne mesure :

#region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent() {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.label1 = new System.Windows.Forms.Label();
        this.panel1 = new System.Windows.Forms.Panel();
        this.panel2 = new System.Windows.Forms.Panel();
        this.textBox2 = new System.Windows.Forms.TextBox();
        this.label2 = new System.Windows.Forms.Label();
        this.panel1.SuspendLayout();
        this.panel2.SuspendLayout();
        this.SuspendLayout();
        // 
        // textBox1
        // 
        this.textBox1.Dock = System.Windows.Forms.DockStyle.Top;
        this.textBox1.Location = new System.Drawing.Point(32, 0);
        this.textBox1.MaximumSize = new System.Drawing.Size(250, 0);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(250, 20);
        this.textBox1.TabIndex = 0;
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Dock = System.Windows.Forms.DockStyle.Left;
        this.label1.Location = new System.Drawing.Point(0, 0);
        this.label1.Name = "label1";
        this.label1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0);
        this.label1.Size = new System.Drawing.Size(32, 16);
        this.label1.TabIndex = 0;
        this.label1.Text = "Field:";
        // 
        // panel1
        // 
        this.panel1.Controls.Add(this.textBox1);
        this.panel1.Controls.Add(this.label1);
        this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
        this.panel1.Location = new System.Drawing.Point(0, 0);
        this.panel1.Name = "panel1";
        this.panel1.Size = new System.Drawing.Size(392, 37);
        this.panel1.TabIndex = 2;
        // 
        // panel2
        // 
        this.panel2.Controls.Add(this.textBox2);
        this.panel2.Controls.Add(this.label2);
        this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
        this.panel2.Location = new System.Drawing.Point(0, 37);
        this.panel2.Name = "panel2";
        this.panel2.Size = new System.Drawing.Size(392, 37);
        this.panel2.TabIndex = 3;
        // 
        // textBox2
        // 
        this.textBox2.Dock = System.Windows.Forms.DockStyle.Top;
        this.textBox2.Location = new System.Drawing.Point(32, 0);
        this.textBox2.MaximumSize = new System.Drawing.Size(250, 0);
        this.textBox2.Name = "textBox2";
        this.textBox2.Size = new System.Drawing.Size(250, 20);
        this.textBox2.TabIndex = 0;
        // 
        // label2
        // 
        this.label2.AutoSize = true;
        this.label2.Dock = System.Windows.Forms.DockStyle.Left;
        this.label2.Location = new System.Drawing.Point(0, 0);
        this.label2.Name = "label2";
        this.label2.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0);
        this.label2.Size = new System.Drawing.Size(32, 16);
        this.label2.TabIndex = 0;
        this.label2.Text = "Field:";
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.AutoScroll = true;
        this.ClientSize = new System.Drawing.Size(392, 116);
        this.Controls.Add(this.panel2);
        this.Controls.Add(this.panel1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.panel1.ResumeLayout(false);
        this.panel1.PerformLayout();
        this.panel2.ResumeLayout(false);
        this.panel2.PerformLayout();
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.Panel panel2;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.Label label2;

Autres conseils

Si vos contrôles se trouvent à l’intérieur d’un panneau, essayez de définir la propriété AutoScroll du panneau sur False.Cela masquera les barres de défilement.J'espère que cela vous oriente dans la bonne direction.

myPanel.AutoScroll = False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top