试图更改控件高度时出现设计器错误
本文关键字:错误 控件 高度 | 更新日期: 2023-09-27 18:29:51
我创建了一个从CheckedListBox派生的类,这样我就可以更改项目高度如下:
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
public class ExpandableChecked : CheckedListBox
{
public ExpandableChecked()
: base()
{
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override int ItemHeight
{
get;
set;
}
}
- 除了在设计器中更改控件高度之外,一切都正常
- 当我尝试拉伸它的宽度或移动很好,但拉伸高度时会显示以下错误信息:
尝试除以零
它怎么了?
更新:我还可以将itemHeight属性添加到属性窗口吗??
由于IntegralHeight属性,它默认为True,因此出现错误。使用该设置,控件将确保高度始终是项目高度的倍数,因此不会看到部分项目。它通过将ClientSize.Height除以ItemHeight来实现。
问题是,您重写了ItemHeight属性,并且根本没有初始化它。它将默认为零。因此,这个部门将轰炸一个DivideByZeroException。
目前还不清楚您打算如何使用此重写属性,以及为什么要重写它。首先在构造函数中将IntegralHeight设置为False作为一种解决方法。
尝试提供基本值:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override int ItemHeight {
get { return base.ItemHeight; }
set { }
}
设计者显然在使用"get"值,所以您应该提供该值。
不过,这样做似乎没有多大意义。基类不允许您更改项目的高度。对于这种功能,最好只使用带有DrawMode=OwnerDrawFixed
的ListBox,并通过DrawItem、MouseDown和KeyPress事件自己处理复选框。