Как я могу убедиться, что полосы прокрутки не перекрывают контент? - PullRequest
2 голосов
/ 25 августа 2008

При создании прокручиваемых пользовательских элементов управления с помощью .NET и WinForms я неоднократно сталкивался с ситуациями, когда, например, всплывала вертикальная полоса прокрутки, перекрывая содержимое элемента управления, что также требовало горизонтальной полосы прокрутки. В идеале содержимое должно немного уменьшаться, чтобы освободить место для вертикальной полосы прокрутки.

Мое текущее решение состояло в том, чтобы просто держать мои элементы управления вне крайних правых 40 пикселей или около того, чтобы вертикальная полоса прокрутки начала занимать. Поскольку это все еще эффективное клиентское пространство для элемента управления, горизонтальная полоса прокрутки по-прежнему появляется, когда она закрывается вертикальной полосой прокрутки, даже если никакие элементы управления вообще не скрываются. Но тогда, по крайней мере, пользователю фактически не нужно использовать горизонтальную полосу прокрутки, которая появляется.

Есть ли лучший способ заставить все это работать? Какой-нибудь способ предотвратить появление ненужных и нежелательных полос прокрутки?

Ответы [ 2 ]

1 голос
/ 26 августа 2008

Вам понадобится немного изменить размеры элементов управления, чтобы они соответствовали ширине вертикальной полосы прокрутки. Один из способов добиться этого достигается с помощью стыковки. Вместо того, чтобы просто отбрасывать элементы управления в форме, вам придется немного поиграть с панелями, отступами, минимальным / максимальным размером и стыковкой.

Вот пример кода, который вы можете поместить за пустой новой формой Form1. Измените размер формы в конструкторе или во время выполнения, и вы увидите, что горизонтальная полоса прокрутки не отображается и поля не перекрываются. Я также дал полям максимальную ширину для хорошей меры:

#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 голосов
/ 26 августа 2008

Если ваши элементы управления находятся внутри панели, попробуйте установить для свойства AutoScroll панели значение False. Это скроет полосы прокрутки. Я надеюсь, что это направит вас в правильном направлении.

myPanel.AutoScroll = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...