Come faccio a verificare che le barre di scorrimento non si sovrappongono contenuto?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Durante la creazione scorrevole controlli utente con .NET WinForms e ho più volte incontrato situazioni in cui, per esempio, una barra di scorrimento verticale si apre, sovrapposti al contenuto del controllo, causando una barra di scorrimento orizzontale anche essere necessario.Idealmente, il contenuto si ridurrebbe solo un po ' per fare spazio per la barra di scorrimento verticale.

La mia soluzione attuale è stato quello di mantenere solo la mia controlli di estrema destra 40 pixel o in modo che la barra di scorrimento verticale-barra di assumere.Dal momento che questo è effettivamente spazio client per il controllo, la barra di scorrimento orizzontale-bar è ancora in piedi, quando viene ricoperta dal di scorrimento verticale-bar, anche se i controlli non vengono nascosti a tutti.Ma poi, almeno l'utente non è in realtà bisogno di utilizzare la barra di scorrimento orizzontale che arriva.

C'è un modo migliore per far funzionare il tutto?Qualche modo per mantenere le inutili e indesiderati barre di scorrimento da mostrare a tutti?

È stato utile?

Soluzione

Avrete bisogno di controlli per ridimensionare leggermente a seconda della larghezza della barra di scorrimento verticale.Un modo per raggiungere questo obiettivo raggiunto attraverso la docking.Piuttosto che cadere solo controlli sul form, dovrai giocare un po ' con pannelli, imbottitura, min/max, il dimensionamento e l'ancoraggio.

Ecco un codice di esempio si può mettere dietro un vuoto new Form1.Ridimensionare il form nella finestra di progettazione o di esecuzione, e vedrai che la barra di scorrimento orizzontale non è dimostrato e i campi non sono sovrapposti.Ho dato anche i campi a larghezza max per buona misura :

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

Altri suggerimenti

Se i controlli sono all'interno di un pannello, provare a impostare la proprietà AutoScroll del Pannello di Falso.Questo consentirà di nascondere le barre di scorrimento.Spero che questo punti nella giusta direzione.

myPanel.AutoScroll = False
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top