web-dev-qa-db-ja.com

パネルに垂直スクロールバーを追加

私はPanelをスクロール可能にしようとしていますが、垂直方向のみです(そのため、子コントロールは左のEdgeを通過しなければならないため、AutoScrollは機能しません)。

では、これはどのように行われますか?

37
Seth Carnegie

Winformsを使用していると仮定すると、デフォルトのパネルコンポーネントは、水平スクロールコンポーネントを無効にする方法を提供しません。これを回避するには、自動スクロールを無効にし、自分でスクロールバーを追加します。

ScrollBar vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
vScrollBar1.Scroll += (sender, e) => { panel1.VerticalScroll.Value = vScrollBar1.Value; };
panel1.Controls.Add(vScrollBar1);

詳細な議論 ここ

28
Teoman Soygul

代わりに、垂直方向のみのスクロールにこれを試してください。
(変更を受け入れる前に自動スクロールをfalseにする必要があります)

mypanel.AutoScroll = false;
mypanel.HorizontalScroll.Enabled = false;
mypanel.HorizontalScroll.Visible = false;
mypanel.HorizontalScroll.Maximum = 0;
mypanel.AutoScroll = true;
32
kamgman

PanelにはAutoScrollプロパティがあります。そのプロパティをTrueに設定するだけで、必要に応じてパネルは自動的にスクロールバーを追加します。

6
123iamking

以下は、カスタムの垂直スクロールバーを実装するコードです。ここで重要な詳細は、パネルに追加するコントロールによって消費されるスペースの量を計算することにより、スクロールバーがいつ必要になるかを知ることです。

panelUserInput.SuspendLayout();
panelUserInput.Controls.Clear();
panelUserInput.AutoScroll = false;
panelUserInput.VerticalScroll.Visible = false;

// here you'd be adding controls

int x = 20, y = 20, height = 0;
for (int inx = 0; inx < numControls; inx++ )
{
    // this example uses textbox control
    TextBox txt = new TextBox();
    txt.Location = new System.Drawing.Point(x, y);
    // add whatever details you need for this control
    // before adding it to the panel
    panelUserInput.Controls.Add(txt);
    height = y + txt.Height;
    y += 25;
}
if (height > panelUserInput.Height)
{
    VScrollBar bar = new VScrollBar();
    bar.Dock = DockStyle.Right;
    bar.Scroll += (sender, e) => { panelUserInput.VerticalScroll.Value =  bar.Value; };
    bar.Top = 0;
    bar.Left = panelUserInput.Width - bar.Width;
    bar.Height = panelUserInput.Height;
    bar.Visible = true;
    panelUserInput.Controls.Add(bar);
}
panelUserInput.ResumeLayout();

// then update the form
this.PerformLayout();
3
glinatser

AutoScrollは本当に解決策です! AutoScrollMargin0, 1000またはこのようなものに設定し、それを使用して下にスクロールし、そこにボタンとアイテムを追加するだけです!

0
OldMember