2013-10-21 120 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