我在C#,Visual Studio Express 2013中工作。 我有CheckListBox,根据底层数据我可以拥有不同数量的项目。我正在尝试根据项目数调整CheckListBox的高度。 目前,一旦项目列表填充,我调用以下方法来设置CheckListBox的高度:
private void SetPanelSize()
{
int top = tbInstructions.Height + 2;
int optionsHeight = 0;
for (int i = 0; i < cbOptions.Items.Count; i++)
{
optionsHeight += cbOptions.GetItemHeight(i);
}
cbOptions.Location = new Point(4, top);
cbOptions.Height = optionsHeight;
}
当我运行它时,CheckListBox高度被设置为等于一个小于项目数的项目 - 即,如果有三个项目,则只有两个可见,并且需要向下滚动才能看到第三个项目。 在调试之后,每个选项高度返回为16.在三个项目的情况下,这给出optionsHeight为48.但是当指定cbOptions.Height设置为36时。
我在以前的方式中已经看到了这个我计算过的高度 - 当我将它分配给高度时,我计算的值会改变。 到底是怎么回事?我错过了什么吗?我没有提到调整我所看过的文献中的高度分配(主要是MSDN)。
非常感谢任何帮助。
答案 0 :(得分:1)
确保将IntegralHeight属性设置为false,并且还必须补偿边框大小:
cbOptions.IntegralHeight = false;
int optionsHeight = 0;
if (cbOptions.BorderStyle == BorderStyle.Fixed3D) {
optionsHeight = SystemInformation.Border3DSize.Height * 2;
} else if (cbOptions.BorderStyle == BorderStyle.FixedSingle) {
optionsHeight = SystemInformation.BorderSize.Height * 2;
}
答案 1 :(得分:0)
CheckListBox本身需要一些高度。因此,您需要将optionsHeight添加到CheckListBox的高度。尝试以下代码,它将起作用:
cbOptions.Height += optionsHeight;