有没有办法将一组字段分成一个类中的“子结构”

时间:2016-09-15 19:56:02

标签: c# vb.net winforms oop

我正在向项目管理软件添加业务仪表板模块 仪表板很少会被一小部分用户使用 - 因此我希望避免使用静态/共享类或每次执行会消耗硬件资源。

我的愿望是所有仪表板颜色都将从实例类:DashBoardGUI内的字段初始化,最后将收集Disposed /垃圾。

这样做的目的是让程序员能够轻松地更改共享颜色,并让用户自定义首选颜色并将其保存在数据库中。

类是非常基本的,没有构造函数,没有大型或资源密集型对象,只是类型为Color的字段。

问题是有很多字段(~35)所以我在开发GUI时很难识别所有字段。

我的意思是,如果我想从DashBoardGUI实例调用一个字段 它非常坦白,看起来像那样:

Public Class CreateGUI
Inherits System.Windows.Forms.Panel

    Private ColorKit As New DashBoardGUI

    Protected Overridable Sub Init()
        RightFlowLayOutPannel.BackColor = ColorKit.someConfusingFieldName1
        LeftFlowLayOutPannel.BackColor = ColorKit.someConfusingFieldName2
        RightClockGraph.BackColor = ColorKit.someConfusingFieldName3
        LeftGroupBox.ForeColor = ColorKit.someConfusingFieldName4
    End Sub
End Class

我希望得到的效果就像使用命名空间一样,“。”标志将减少选项并引导我到所请求的字段:

Public Class CreateGUI
Inherits System.Windows.Forms.Panel

    Private ColorKit As New DashBoardGUI

    Protected Overridable Sub Init()
        RightFlowLayOutPannel.BackColor = ColorKit.FlPannels.FieldName
        LeftFlowLayOutPannel.BackColor = ColorKit.FlPannels.FieldName
        RightClockGraph.BackColor = ColorKit.Clocks.FieldName
        LeftGroupBox.ForeColor = ColorKit.GroupBoxes.FieldName
    End Sub
End Class

我已尝试在 nested Structures类中创建nested ClassesDashBoardGUI ,但如果将它们声明为静态/共享,则编译器不允许我使用它们。如果我将它们声明为共享它也是不可能的:

shared is not valid on a structure deceleration(我理解为什么)。

所以我的问题是:如何获得与使用具有多个共享类的命名空间类似的效果 - 调用字段如: xxx.yyy.myfield 当我使用实例类?
也许有人有一个完全不同的方法,可以建议我吗? 也许我保存资源的方法(在顶部解释)是错误的,我应该创建静态/共享类的命名空间?

谢谢。

2 个答案:

答案 0 :(得分:2)

我没有读过这个问题,但可能是这样的:

Class A
    Class B
        Public myfield%
    End Class
    Public yyy As New B
End Class

样本使用:

Dim xxx As New A
xxx.yyy.myfield = 123

答案 1 :(得分:0)

您可以按照

中的显示对所需的字段进行分组

Define String ENUM in VB.Net

e.g。

Class FlPanels

    Private Key As String

    Public Shared ReadOnly confusingField1 As FlPanels = New FlPanels("confusingField1")
    Public Shared ReadOnly confusingField2 As FlPanels = New FlPanels("confusingField2")

    Private Sub New(key As String)
        Me.Key = key
    End Sub

    Public Function FieldName() As String
        Return Me.Key
    End Function
End Class

并像这样使用它:

FlPanels.confusingField1.FieldName