设置检查列表框的高度不起作用

时间:2015-01-01 12:10:01

标签: c#

我在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)。

非常感谢任何帮助。

2 个答案:

答案 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;