Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET用户控件--具有下拉列表的子类?_.net_Vb.net_User Controls - Fatal编程技术网

.NET用户控件--具有下拉列表的子类?

.NET用户控件--具有下拉列表的子类?,.net,vb.net,user-controls,.net,Vb.net,User Controls,我正在进行控制,但我有一个问题 现在,它可以很好地执行以下操作: 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

我正在进行控制,但我有一个问题

现在,它可以很好地执行以下操作:

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等操作,则效果会很好。但是显然,除了宽度之外,还有更多的值,并且在属性页面中看起来非常难看

我想要一个类似于下拉条的东西,所以我考虑添加一个类,即

Public Class CircularProgressBar : Inherits UserControl
    Public Class BarTest
     ....subclasscode
    End Class
..Class Code
End Class
但是,这些值的下拉列表不会出现。如果我执行公共类BarTest,它们也会这样做:同时继承UserControl,但它附带了大量不需要的值。我需要的是一种下拉列表的方式,但不是使用usercontrol中的所有额外功能。我可能错过了一些非常小的东西


谢谢

不完全清楚正在编辑/保存的内容或这些内容是什么-因为您谈论的是一个属性编辑器,它们的性质具有某种重要意义

UIType编辑器不是一种风格选择。VS将根据类型自动使用几个内置的。即使您自己编写,您通常也会继承一些现有的基类,这样它们就不会看起来太不一样了

在最简单的情况下,可能一个公开的数组可以工作(同样,对于您正在进行的操作,我们知之甚少)


所以,一切似乎都很好。似乎定义一个酒吧可能有更多的问题(比如哪一个)。如果是这样,您可以定义一个
Bar
类来存储{Index,Width,Color}-任何内容,并公开它们的集合

“下拉列表”不会帮助任何人编辑1到5个BarWidth值。Google“UITypeEditor”。如果顶层公开了一个
集合(我不能完全理解多条条方面),并且每个都公开了自己的整数宽度属性,那么可以使用标准的CollectionEditor。不过,您可能需要编写一个TypeEditor来支持它。这很好用!但是,当我想要公开一个集合或仅仅是另一个类时,我的问题就来了。例如:Private _bartestingas BarTest=New BarTest()Public Property barTesting()As BarTest Get Return _bartestingend Get Set(ByVal v As BarTest)_barTesting=v:Invalidate()End Set End Property barTesting在属性窗口中(编辑控件时)将显示为:WindowsApplication2.CircularProgressBar+BarTestNevermind,明白了。现在它似乎很开心。谢谢重写ToString()方法也会编辑属性窗口区域名称,以便可以根据需要调整Int64或它所说的任何内容。很好!例如,Public将函数ToString()重写为字符串返回“Bar Data”结束函数。是的,在某一点上,答案将是一个集合类,但正如我所说的,不清楚您到底想要什么。最后,我给出了一个答案,它只提供了可扩展/下拉编辑功能。
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
    ...
'
'DemoBarControl2
'
Me.DemoBarControl2.BarSizes = New Integer() {2, 5, 2, 3, 4}