2011-02-03 60 views
0

我有一個包含含CheckedListBox在C#中ToolStripControlHost,像這樣一個ToolStripDropDownButton:ToolstripControlHost'ed CheckedListBox溢出問題

checkedListBox = new CheckedListBox(); 
dropDownButton = new ToolStripDropDownButton("Button"); 
host = new ToolStripControlHost(checkedListBox); 
dropDownButton.DropDownItems.Add(host); 

一切工作正常,直到CheckedListBox項目數量的增加,屏幕邊界之外的checklistbox ToolStripDropDown在頂部和底部繪製「小三角形按鈕」以向上或向下滾動菜單。每當我點擊滾動,我崩潰System.Windows.Forms.ToolStripItemCollection.this[].get與此例外:

索引超出範圍。必須是非負數且小於集合的大小。 參數名:指數

我懷疑,既然ToolStripDropDownButton只有真正擁有一個項目(主機),這是我的異常的原因。如果是這樣的話,任何人都可以有任何解決方法?

回答

0

你的猜測是正確的。問題是在.NET邏輯以顯示滾動條按鈕(在ToolStrip.SetDisplayedItems),它是:

bool verticallyContained = clientBounds.Contains(clientBounds.X, item.Bounds.Top) && 
         clientBounds.Contains(clientBounds.X, item.Bounds.Bottom); 
if (!verticallyContained) { 
    allContained = false; 
} 

的邏輯是:「如果我們有斷底的控制,允許滾動」。但是沒有其他控件可以滾動到。

最佳答案是:「不要這樣做。」


編輯:爲防止崩潰,創建並添加第二個ToolStripControlHost。你仍然無法訪問底部的檢查項目,但至少應用程序將生存下來。

+0

我發現了一個至少可以防止崩潰的解決方法:添加第二個dropDownButton項。看到上面的代碼 – 2011-02-26 01:32:11