我有一个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只有一个项目(主机),这是我的异常的原因。如果是这样的话会有人有任何解决方法吗?
答案 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。您仍然无法访问底部检查项目,但至少该应用程序将继续存在。