2013-05-16 41 views
4

我創建一個自定義listview控制。我將它設置爲每次添加新列時添加一個新按鈕。
當我運行包含我的自定義控制程序,欄按鈕得到妥善安置。但是,在設計時,當我添加或刪除列時,控件不會更新添加的按鈕。設計時重繪

它們在運行時確定,但在設計時,我需要關閉窗體並重新打開它(強制重新繪製),以更新欄按鈕。
如何以編程方式強制重繪我的用戶控件?
列屬性看起來是這樣的:

<MergableProperty(False)> _ 
    <Editor("System.Windows.Forms.Design.ColumnHeaderCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", GetType(UITypeEditor))> _ 
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _ 
    <Localizable(True)> _ 
    Public ReadOnly Property Columns() As ListView.ColumnHeaderCollection 
     Get 
      Return ListView1.Columns 
     End Get 
    End Property 

我試圖重新繪製這樣的控制:

Me.Invalidate() 
    Dim x As New Rectangle With {.X = Me.Location.X, .Y = Me.Location.Y, .Size = Me.Size} 
    Me.NotifyInvalidate(x) 

但由於某些原因,它不工作。在設計時,每次添加一列時,都不會添加相應的按鈕。

+0

代碼工作的大部分。目前還不清楚按鈕是否與列標題相同,我認爲它是。我也猜測你的控件正在加載一個ListView控件,而不是從它繼承。我在VS2012上測試過。 – LarsTech

+0

是的,這是真的,我使用的是一個列表視圖控件,我的控件只是添加一些自定義樣式按鈕作爲該列表視圖的標題..出於某些原因,他們不更新設計模式... – rusoaica

+0

我建議你編輯你的文章的代碼就如何顯示這些按鈕。 – LarsTech

回答

1

只是一個快速的想法,可能不是最好的解決方案,但它並沒有傷害嘗試,我猜它即將正常工作,即使如我所說,這不是最好的方式來做到這一點。

在您使用添加子/刪除列,添加以下內容:

Dim Graphics As Graphics = [yourform].CreateGraphics 
Dim ParamArg As New PaintEventArgs(Graphics, [yourform].ClientRectangle) 
InvokePaint(Me, ParamArgs) 

這應當執行討厭的東西將油漆本身每次您添加/刪除。