2011-02-03 55 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