2012-04-01 27 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。通過該設置,控件可以確保高度始終是項目高度的倍數,因此不會顯示部分項目。它通過將ItemSize.Height除以ItemHeight來實現。

麻煩的是,你重寫了ItemHeight財產,完全不進行初始化。它將默認爲零。所以這個部門將要爆炸DivideByZeroException。

這是你打算如何使用此重寫的財產,爲什麼你重寫它的一切都非常清楚。首先在構造函數中將IntegralHeight設置爲False作爲一種解決方法。

+0

非常感謝你我剛剛改變了IntegralHeight屬性爲false,如你所說 – Star 2012-04-01 17:09:09

1

嘗試提供的基礎值:

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

設計者顯然是在利用「獲取」的值,所以你應該提供該值。

似乎有沒有太大的點來這樣做雖然。基類不會讓你改變物品的高度。對於這種功能,它可能是最好只使用一個列表框與DrawMode=OwnerDrawFixed並通過DRAWITEM,的MouseDown和按鍵事件處理自己的複選框。

+0

一切工作正常,但在設計模式下這個問題 當我實現基類功能我沒有得到我想要的 – Star 2012-04-01 17:04:12