2013-10-21 151 views
0

在一個WinForms用戶控件我已經集成了一個進度條到一個ListView的用戶控件的一些值,這是屬性之一:無法設置從VS屬性窗口

''' <summary> 
''' The ListView ProgressBar BorderColor 
''' </summary> 
Public Property ProgressBar_BorderColor As Pen 
    Get 
     Return _progressBar_bordercolor 
    End Get 
    Set(ByVal value As Pen) 
     _progressBar_bordercolor = value 
    End Set 
End Property 

好了,問題是,在屬性窗口我無法更改筆和筆刷值。

我可以手動更改這些值,但不能在屬性窗口中寫入代碼。

編碼屬性時我做錯了什麼,或只是這些類型的值不能更改任何其他控件的屬性窗口中,而不僅僅是我的控制?爲什麼?

我需要修改,以便能夠在我的用戶控件的屬性窗口中更改這些值?

enter image description here

+1

我很確定**這是可能的**但您必須實現自己的**類型轉換器**或自定義**編輯器**以用於您自己的控制。 –

+0

@金王謝謝你的評論,你能幫我找到關於如何做到這一點的在線參考/教程嗎?對我來說是全新的。我認爲InDesign-Time編輯器應該比類型轉換器更難,但無論如何,我認爲我從來沒有見過類型轉換器,你的意思是這樣..我不知道要做多少艱難該類型的轉換器。 – ElektroStudios

+0

@ King King您的意思是將屬性類型設置爲Color,然後將該顏色轉換爲筆/畫筆?如果是,那麼我認爲我可以做到這一點,似乎很容易,但無論如何,我想知道是否有更「本地」的方式能夠更改屬性窗口中的這些值。 – ElektroStudios

回答

1

這將是更好的使用,因此你可以正確地處理它們時創建的GDI對象:

Using g as Graphics = Graphics.FromWhereEver, 
      P as New Pen(ProgressBar_BorderColor), 
      Br as New SolidBrush(ProgressBar_BackColor) 

    ... draw and paint 
    ... paint and draw 
End Using   ' Graphics, Pen and Brush properly disposed of 

它不會讓差異很大,因爲我懷疑你會坐下來改變顏色來回作爲一種愛好,但是當設置新的顏色值時它們不會被丟棄。

1

解決方案:

·刷爲顏色<>顏色,以刷

Private _progressBar_backcolor As SolidBrush = New SolidBrush(Color.Red) 

Public Property ProgressBar_BackColor As Color 
    Get 
     Return _progressBar_backcolor.Color 
    End Get 
    Set(ByVal value As Color) 
     _progressBar_backcolor = New SolidBrush(value) 
    End Set 
End Property 

·筆爲顏色<>顏色,以筆

Private _progressBar_bordercolor As Pen = New Pen(Color.LightGray) 

Public Property ProgressBar_BorderColor As Color 
    Get 
     Return _progressBar_bordercolor.Color 
    End Get 
    Set(ByVal value As Color) 
     _progressBar_bordercolor = New Pen(value) 
    End Set 
End Property 

enter image description here

+0

我很好奇什麼速度差異在緩存GDI對象,並認爲你可能會感興趣。在使用筆和筆刷寫入120位圖的循環中,使用預製筆和筆刷之間的總差異爲100毫秒,與爲每次迭代創建新筆畫相差100毫秒。不足以擔心考慮使用''將爲我們處理它們。 – Plutonix