【问题标题】:Designer Error when try to change control height尝试更改控制高度时的设计器错误
【发布时间】:2012-04-01 16:36:44
【问题描述】:

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

【问题讨论】:

    标签: c# winforms windows-forms-designer


    【解决方案1】:

    由于 IntegralHeight 属性而出错,它默认为 True。使用该设置,控件确保高度始终是项目高度的倍数,因此没有部分项目可见。它通过将 ClientSize.Height 除以 ItemHeight 来实现。

    问题是,您覆盖了 ItemHeight 属性并且根本不初始化它。它将默认为零。所以这个部门将轰炸 DivideByZeroException。

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

    【讨论】:

    • 非常感谢,我刚刚将 IntegralHeight 属性更改为 false,正如您所说
    【解决方案2】:

    尝试提供基本值:

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

    设计师显然在使用“get”值,所以你应该提供那个值。

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

    【讨论】:

    • 一切正常,但是在设计模式下,当我实现基类功能时,我没有得到我想要的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2013-11-30
    相关资源
    最近更新 更多