2

.NETとWinFormsを使用してスクロール可能なユーザーコントロールを作成するときに、たとえば、垂直スクロールバーがポップアップし、コントロールのコンテンツと重なって、水平スクロールバーも必要になるという状況に繰り返し遭遇しました。理想的には、コンテンツは垂直スクロールバー用のスペースを作るために少し縮小します。

私の現在の解決策は、コントロールを右端の40ピクセルから遠ざけるか、垂直スクロールバーが占めるようにすることです。これは依然として実質的にコントロールのクライアントスペースであるため、コントロールがまったく非表示になっていない場合でも、水平スクロールバーが垂直スクロールバーで覆われると、水平スクロールバーが表示されます。ただし、少なくともユーザーは、表示される水平スクロールバーを実際に使用する必要はありません。

これをすべて機能させるためのより良い方法はありますか?不要なスクロールバーがまったく表示されないようにする方法はありますか?

4

2 に答える 2

1

垂直スクロール バーの幅に合わせて、コントロールのサイズを少し変更する必要があります。これを実現する 1 つの方法は、ドッキングによって実現されます。フォームにコントロールをドロップするだけでなく、パネル、パディング、最小/最大サイズ変更、およびドッキングを少し操作する必要があります。

空白の新しい 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;
于 2008-08-25T22:15:50.930 に答える
0

コントロールがパネル内にある場合は、Panel の AutoScroll プロパティを False に設定してみてください。これにより、スクロールバーが非表示になります。これがあなたを正しい方向に向けてくれることを願っています。

myPanel.AutoScroll = False
于 2008-08-25T20:25:20.417 に答える