Wie kann ich sicherstellen, dass Bildlaufleisten den Inhalt nicht überlappen?

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

  •  09-06-2019
  •  | 
  •  

Frage

Beim Erstellen scrollbarer Benutzersteuerelemente mit .NET und WinForms bin ich immer wieder auf Situationen gestoßen, in denen beispielsweise eine vertikale Bildlaufleiste auftauchte, die den Inhalt des Steuerelements überlappte, sodass auch eine horizontale Bildlaufleiste erforderlich war.Idealerweise würde der Inhalt ein wenig verkleinert werden, um Platz für die vertikale Bildlaufleiste zu schaffen.

Meine aktuelle Lösung bestand darin, meine Steuerelemente einfach außerhalb der etwa 40 Pixel ganz rechts zu halten, damit die vertikale Bildlaufleiste Platz einnimmt.Da dies im Grunde immer noch der Client-Bereich für das Steuerelement ist, wird die horizontale Bildlaufleiste immer noch angezeigt, wenn sie von der vertikalen Bildlaufleiste verdeckt wird, auch wenn überhaupt keine Steuerelemente ausgeblendet werden.Aber dann muss der Benutzer es zumindest nicht wirklich tun verwenden die horizontale Bildlaufleiste, die angezeigt wird.

Gibt es eine bessere Möglichkeit, das alles zum Laufen zu bringen?Gibt es eine Möglichkeit, zu verhindern, dass unnötige und unerwünschte Bildlaufleisten überhaupt angezeigt werden?

War es hilfreich?

Lösung

Sie müssen die Größe Ihrer Steuerelemente leicht ändern, um sie an die Breite der vertikalen Bildlaufleiste anzupassen.Eine Möglichkeit, dies zu erreichen, ist das Andocken.Anstatt nur Steuerelemente auf dem Formular abzulegen, müssen Sie ein wenig mit Panels, Innenabständen, minimaler/maximaler Größe und Andocken experimentieren.

Hier ist ein Beispielcode, den Sie hinter einem leeren neuen Form1 platzieren können.Wenn Sie die Größe des Formulars im Designer oder zur Laufzeit ändern, werden Sie feststellen, dass die horizontale Bildlaufleiste nicht angezeigt wird und die Felder sich nicht überlappen.Zur Sicherheit habe ich den Feldern auch eine maximale Breite gegeben:

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

Andere Tipps

Wenn sich Ihre Steuerelemente innerhalb eines Panels befinden, versuchen Sie, die AutoScroll-Eigenschaft des Panels auf False zu setzen.Dadurch werden die Bildlaufleisten ausgeblendet.Ich hoffe, das weist Sie in die richtige Richtung.

myPanel.AutoScroll = False
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top