2008-08-25 4 views
2

Lors de la création de contrôles utilisateur scrollables avec .NET et WinForms, j'ai souvent rencontré des situations où, par exemple, une barre de défilement verticale apparaissait, chevauchant le contenu du contrôle, provoquant également une barre de défilement horizontale. Idéalement, le contenu rétrécirait juste un peu pour faire de la place à la barre de défilement verticale.Comment puis-je m'assurer que les barres de défilement ne chevauchent pas le contenu?

Ma solution actuelle a consisté simplement à garder mes contrôles à l'extrême droite de 40 pixels ou plus que la barre de défilement verticale va prendre. Comme il s'agit toujours d'un espace client pour le contrôle, la barre de défilement horizontale apparaît quand elle est couverte par la barre de défilement verticale, même si aucun contrôle n'est caché. Mais au moins, l'utilisateur n'a pas besoin de utiliser la barre de défilement horizontale qui apparaît.

Y a-t-il une meilleure façon de faire en sorte que tout cela fonctionne? Un moyen de ne plus afficher les barres de défilement inutiles et indésirables? Si vos contrôles sont à l'intérieur d'un panneau, essayez de définir la propriété AutoScroll du panneau sur False.

Répondre

1

Vous aurez besoin de vos contrôles pour redimensionner légèrement pour s'adapter à la largeur de la barre de défilement verticale. Un moyen d'y parvenir grâce à l'amarrage. Plutôt que de simplement laisser tomber les contrôles sur le formulaire, vous devrez jouer un peu avec les panneaux, le rembourrage, le dimensionnement min/max et l'ancrage.

Voici un exemple de code que vous pouvez placer derrière un nouveau Form1 vide. Redimensionnez le formulaire, dans le concepteur ou l'exécution et vous verrez que la barre de défilement horizontale n'est pas affichée et les champs ne se chevauchent pas. J'ai également donné aux champs une largeur maximum pour la 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; 
0

Cela masquera les barres de défilement. J'espère que cela vous indique la bonne direction.

myPanel.AutoScroll = False 
Questions connexes