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

时间:2012-04-01 16:36:45

标签: c# winforms windows-forms-designer

我创建了一个派生自 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属性添加到属性窗口吗?

2 个答案:

答案 0 :(得分:1)

尝试提供基本值:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override int ItemHeight {
  get { return base.ItemHeight; }
  set { }
}

设计师显然正在使用“获取”值,因此您应该提供该值。

尽管如此,这似乎没有太多意义。基类不允许您更改项目的高度。对于这种功能,最好只使用带有DrawMode=OwnerDrawFixed的ListBox,并通过DrawItem,MouseDown和KeyPress事件自行处理复选框。

答案 1 :(得分:1)

由于IntegralHeight属性,这出错了,默认为True。使用该组,控件可确保高度始终是项目高度的倍数,因此不会显示部分项目。它通过将ClientSize.Height除以ItemHeight来实现。

麻烦的是,你覆盖了ItemHeight属性并且根本没有初始化它。它将默认为零。所以这个部门将在DivideByZeroException上轰炸。

目前还不清楚你打算如何使用这个被覆盖的属性以及为什么要覆盖它。首先将构造函数中的IntegralHeight设置为False作为一种解决方法。