我正在控制,但我遇到了问题。
现在它可以正常运行,例如:
Public Class CircularProgressBar : Inherits UserControl
Private _barWidth As Integer = 4
Public Property BarWidth() As Integer
Get
Return _barWidth
End Get
Set(ByVal v As Integer)
_barWidth = v : Invalidate()
End Set
End Property
..etc
End Class
以上例如将在属性窗口中显示正常。但是,我希望在同一个控件中显示1-5个条形,如果我只是定义了一个数组/列表或者做了_barWidth1,_barWidth2等,它会正常工作。但显然有更多的值然后只是宽度而且它看起来很难看在属性页面中。
我想要一个像DROPDOWN一样的东西,所以我考虑添加一个类,即。
Public Class CircularProgressBar : Inherits UserControl
Public Class BarTest
....subclasscode
End Class
..Class Code
End Class
但是,值的下拉列表不会出现。如果我做公共类BarTest它们也会这样做:继承UserControl,但它带来了大量不需要的值。我需要的是一些方法来获得下拉,但不是所有额外的东西都可以用来控制用户控件。我可能错过了很小的东西。
谢谢!
答案 0 :(得分:1)
目前还不完全清楚正在编辑/保存的是什么或者这些是什么 - 因为你在谈论一个属性编辑器,它们的性质是有些重要的。
UIType编辑器不是一种风格选择。 VS会根据Type自动使用几种内置功能。即使你自己编写,你通常会继承一些现有的基类,所以它们通常看起来不太相似。
在最简单的情况下,也许一个暴露的数组可能会起作用(同样,对于你要做的事情知之甚少)。
Public Class DemoBarControl
Inherits UserControl
Private barz As Int32()
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public Property BarSizes As Int32()
Get
Return barz
End Get
Set(value As Int32())
For n As Int32 = 0 To Math.Min(value.Count-1, 4)
barz(n) = If(value(n) > 0, value(n), 0)
Next
End Set
End Property
Friend Function ShouldSerializeBarSizes() ...
Friend Sub ResetBarSizes...
Public Sub New()
barz = {0, 1, 2, 3, 4}
End Sub
...
这导致以下显示:
这可能是您下拉的意思吗?
这是在这种情况下自动使用的ExpandableObjectConverter
。显示有点粗糙,因为它只是一个裸阵列,但它很简单。注意...
按钮,它将打开标准集合编辑器并允许用户添加新元素(排序)。由于实际存储是一个数组,因此可以在Setter中过滤掉额外内容(并且可以测试范围),但这可能会使用户感到困惑。序列化由VS处理:
'
'DemoBarControl2
'
Me.DemoBarControl2.BarSizes = New Integer() {2, 5, 2, 3, 4}
所以,一切似乎都很好。看起来定义一个Bar(比如哪一个)可能会有更多。如果是这样,您可以定义Bar
类来存储{索引,宽度,颜色} - 无论如何,并公开它们的集合。