Ошибка дизайнера при попытке изменить высоту управления - PullRequest
0 голосов
/ 01 апреля 2012

я создал класс, полученный из 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 ]

1 голос
/ 01 апреля 2012

Это происходит неправильно из-за свойства IntegralHeight, по умолчанию оно равно True. С этим набором элемент управления гарантирует, что высота всегда кратна высоте элемента, поэтому частичные элементы не будут видны. Это достигается путем деления ClientSize.Height на ItemHeight.

Проблема в том, что вы переопределили свойство ItemHeight и не инициализировали его вообще. По умолчанию будет ноль. Так что это подразделение будет бомбить исключение DivideByZeroEx.

Очень непонятно, как вы собираетесь использовать это переопределенное свойство и почему вы вообще его переопределяете. Начните с установки значения IntegralHeight в False в конструкторе в качестве одного временного решения.

1 голос
/ 01 апреля 2012

Попробуйте указать базовые значения:

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

Разработчик, очевидно, использует значение "get", поэтому вы должны указать это значение.

Хотя, похоже, нет особого смысла делать это. Базовый класс не позволит вам изменить высоту предмета. Для такого рода функций, возможно, было бы лучше просто использовать ListBox с DrawMode=OwnerDrawFixed и самостоятельно обрабатывать этот флажок через события DrawItem, MouseDown и KeyPress.

...