2011-05-22 98 views
26

我一直在尋找一段時間獲得一個關於在面板上獲得一個垂直滾動條的教程(並讓它正常工作等)我試圖做一個面板可滾動,但只能垂直滾動(所以AutoScroll將不起作用,因爲子控件經過左邊緣並且必須)。那麼這是如何完成的?這可能以前被問過,但我無法在任何地方找到它。在.NET中添加垂直滾動條到面板

+0

所以,你要只有垂直滾動時,它的必要嗎?所以將'Scrollbars'屬性設置爲'Vertical'將不起作用? – debracey 2011-05-22 20:29:15

+0

@debracey我的'Panel'上沒有任何屬性叫做'Scrollbars',它不會在Intellisense中顯示出來。我見過其他人談論它,所以我認爲它存在,但我只是做錯了。我得到這一行的錯誤:'panel1.Scrollbars = ScrollBars.Vertical;' - ''System.Windows.Forms.Panel'不包含'Scrollbars'的定義,沒有擴展方法'Scrollbars'接受第一個參數可以找到類型'System.Windows.Forms.Panel'(你是否缺少使用指令或程序集引用?) – 2011-05-22 20:33:21

+0

@debracey我正在使用VS 2010 Pro。 – 2011-05-22 20:33:33

回答

25

假設您使用的是winforms,默認的面板組件不會提供禁用水平滾動組件的方法。這方面的一個解決方法是自己禁用自動滾動,並添加一個滾動條:

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

詳細討論此:http://social.msdn.microsoft.com/Forums/en-IE/winforms/thread/6b9c2c72-e91a-40f0-a835-c12328490c0c

+0

我真的不想做這個'黑客'。我怎樣才能用'VScrollBar'組件手動執行它? – 2011-05-22 20:35:26

+0

添加了一個小樣本。 – 2011-05-22 20:37:23

+0

@Teoman這個例子沒有幫助,我可以用表單設計器來做到這一點。確定滾動條的最大/最小值應該是多少的公式是什麼?當滾動條向下滾動時,我如何偏移面板內的控件? – 2011-05-22 20:42:27

-1

添加到您的面板的樣式代碼是這樣的:

<asp:Panel ID="myPanel" runat="Server" CssClass="myPanelCSS" style="overflow-y:auto; overflow-x:hidden"></asp:Panel> 
4

面板具有AutoScroll屬性。只需將該屬性設置爲True,面板將在需要時自動添加滾動條。

2

下面是實現自定義垂直滾動條的代碼。這裏的重要細節是通過計算添加到面板的控件佔用多少空間來知道何時需要滾動條。

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(); 
13

試試這個,而不是'只'滾動垂直。
(自動滾動需要是假的B4它會接受改變)

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

提出「AutoScroll」需要設置爲false的事實很有用,謝謝你 – mschr 2016-07-31 09:57:21