2012-04-01 5 views
0

я создал класс, производный от 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 в окно свойств?

ответ

1

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

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

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

+0

Большое вам спасибо, что я просто изменил свойство IntegralHeight на false, как вы сказали – Star

1

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

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

Дизайнер, очевидно, с помощью «получить» значение, так что вы должны поставить это значение.

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

+0

все работает отлично, но эта проблема в режиме разработки , когда я реализую функциональность базового класса, я не получаю то, что хочу – Star

Смежные вопросы