2008-08-25 24 views
2

.NETとWinFormsでスクロール可能なユーザーコントロールを作成するときに、たとえば、垂直スクロールバーがポップアップし、コントロールのコンテンツをオーバーラップさせて、水平スクロールバーも必要になる状況が繰り返し発生しました。理想的には、垂直スクロールバーのためのスペースを確保するためにコンテンツがほんの少し縮小するでしょう。スクロールバーがコンテンツに重ならないようにするにはどうすればよいですか?

私の現在の解決策は、コントロールを縦方向のスクロールバーが上にくるように、右端40ピクセルから離すことです。これは依然としてコントロールのクライアント空間であるため、コントロールがまったく隠されていなくても、垂直スクロールバーで覆われると水平スクロールバーが表示されます。しかし、少なくともユーザーが実際にはを使用する必要はありませんが来る水平スクロールバー。

これをすべて有効にする良い方法はありますか?不要な不要なスクロールバーが表示されないようにする方法

答えて

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

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

myPanel.AutoScroll = False 
関連する問題