ToolstripControlHost'ed CheckedListBox溢出问题

时间:2011-02-03 20:45:23

标签: .net winforms user-controls

我有一个ToolStripDropDownButton,其中包含一个ToolStripControlHost,其中包含一个C#中的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崩溃,但有以下异常:

  

指数超出范围。必须是非负数且小于集合的大小。   参数名称:index

我怀疑由于ToolStripDropDownButton只有一个项目(主机),这是我的异常的原因。如果是这样的话会有人有任何解决方法吗?

1 个答案:

答案 0 :(得分: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。您仍然无法访问底部检查项目,但至少该应用程序将继续存在。