2012-11-01 115 views
6

我正在開發一個需要控制ListBox的應用程序。不幸的是,當我在ListBox中添加太多項目時,會顯示一個垂直滾動條。我能做些什麼來隱藏ListBox所示的垂直滾動條嗎?我可以看到有一個屬性可以隱藏水平滾動條,但是垂直滾動條沒有屬性。隱藏ListBox控件中的垂直滾動條

+0

如果您刪除垂直滾動條,那麼用戶將如何訪問滾動邊緣以外的項目? –

+0

@LayTaylor感謝您的回覆。我忘了提及我有一個RichTextBox。我已經設法控制RichTextBox中的列表框。所以,不需要在列表框中顯示滾動條。有一個美好的一天:) –

+0

好吧,我不知道有任何方法來刪除滾動條。我知道的唯一方法是確保列表框足夠長以容納所有物品。 –

回答

8

問題解決了。我簡單地創建的模板的一個新項目,一個類庫用下面的代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace ClassLibrary1 
{ 
    public class MyListBox : System.Windows.Forms.ListBox 
    { 
     private bool mShowScroll; 
     protected override System.Windows.Forms.CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       if (!mShowScroll) 
        cp.Style = cp.Style & ~0x200000; 
       return cp; 
      } 
     } 
     public bool ShowScrollbar 
     { 
      get { return mShowScroll; } 
      set 
      { 
       if (value != mShowScroll) 
       { 
        mShowScroll = value; 
        if (IsHandleCreated) 
         RecreateHandle(); 
       } 
      } 
     } 
    }  
} 

然後,我已經建立了項目輸出新的類庫ClassLibrary1.dll

在我的主要項目中,我我們右鍵單擊了ToolBox並選擇了Choose Items...。點擊瀏覽...並選擇我最近創建的類庫(ClassLibrary1.dll)並點擊打開然後點擊確定。因此,我可以使我的自定義ListBox不再有垂直滾動條。

1

除了水平滾動條,正常使用時沒有辦法可以關閉垂直滾動條。

只能使用屬性ScrollAlwaysVisible(也在VB中)將其設置爲始終可見或自動。

當您添加項目,通過計算,這樣的事情你可以代替重新計算ClientSize(未經測試,可能需要填充值添加到它):

Size sz = new Size(ListBox1.ClientSize.Width, _ 
        ListBox1.Items.Count * ListBox1.Font.Height); 
ListBox1.ClientSize = sz 

當然,您應該添加如果值爲零,並且/或者您想要最小/最大高度,請檢查該值。

+0

謝謝,我已經成功地隱藏了創建類庫的垂直滾動條。我會在一會兒發佈我的解決方案:) –

+1

不錯:-)當你問是否可以用ListBox控件完成時,我會保留我的答案原樣:-) – K3N

+0

沒問題。謝謝你的回答。祝你有美好的一天 :) –