试图更改控件高度时出现设计器错误

本文关键字:错误 控件 高度 | 更新日期: 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事件自己处理复选框。