Vb6 - доступ к переменным класса через древовидную структуру

Тема в разделе "Visual Basic", создана пользователем yxoglyxo, 23 окт 2008.

  1. yxoglyxo

    yxoglyxo Гость

    Всем привет!

    задача:

    есть Private класс clsCollaring
    В классе объявлены следующие переменные:

    Private Type Band
    Decrease As Double
    Collaring As Double
    End Type

    Private Type NCDType
    NCDType_5_Plus(4) As Band
    NCDType_Increased(4) As Band
    NCDType_Equal(4) As Band
    NCDType_All(4) As Band
    End Type


    Private Type PolicyType
    PolicyOddNumbers As NCDType
    PolicyEvenNumbers As NCDType
    PolicyAllNumbers As NCDType
    End Type

    Public mudtprops As PolicyType


    Такая структура переменных сделана для того чтобы получить к переменным следующим образом:

    dim MyCollar as clsCollaring
    set MyCollar = new clsCollaring

    доступ к переменным (разумеется это не работает, так как переменные Private, но показываю как "в идеале" должно быть):

    MyCollar.PolicyOddNumbers.NCDType_5_Plus(0).Decrease=10
    MyCollar.PolicyOddNumbers.NCDType_5_Plus(0).Collaring=5

    MyCollar.PolicyOddNumbers.NCDType_5_Plus(1).Decrease=20
    MyCollar.PolicyOddNumbers.NCDType_5_Plus(1).Collaring=10

    MyCollar.PolicyOddNumbers.NCDType_5_Plus(2).Decrease=40
    MyCollar.PolicyOddNumbers.NCDType_5_Plus(2).Collaring=30

    MyCollar.PolicyOddNumbers.NCDType_5_Plus(3).Decrease
    MyCollar.PolicyOddNumbers.NCDType_5_Plus(3).Collaring

    MyCollar.PolicyOddNumbers.NCDType_5_Plus(4).Decrease
    MyCollar.PolicyOddNumbers.NCDType_5_Plus(4).Collaring

    далее следующий NCD_Type:

    MyCollar.PolicyOddNumbers.NCDType_Increased(0).Decrease
    MyCollar.PolicyOddNumbers.NCDType_Increased(0).Collaring

    MyCollar.PolicyOddNumbers.NCDType_Increased(1).Decrease
    MyCollar.PolicyOddNumbers.NCDType_Increased(1).Collaring

    перебрав все NCDType переключаемся на следующую PolicyEvenNumbers:

    MyCollar.PolicyEvenNumbers.NCDType_5_Plus(0).Decrease=10
    MyCollar.PolicyEvenNumbers.NCDType_5_Plus(0).Collaring=5

    MyCollar.PolicyEvenNumbers.NCDType_5_Plus(1).Decrease=20
    MyCollar.PolicyEvenNumbers.NCDType_5_Plus(1).Collaring=10

    и т.д.

    Т.е фактически хочу следующую структуру:

    -PolicyODD
    --------NCDType_5_Plus
    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band3
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band4
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band5
    -------------------------Decrease
    -------------------------Collaring

    --------NCDType_Increased
    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    -------------------------Collaring

    .....и т.д.
    --------NCDType_Equal
    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    -------------------------Collaring

    .....и т.д.

    --------NCDType_All

    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    -------------------------Collaring

    .....и т.д.

    то же самое для
    -PolicyEven
    --------NCDType_5_Plus
    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    -------------------------.....и т.д.

    ну и соответственно для PolicyALL:
    -PolicyALL
    --------NCDType_5_Plus
    --------------------Band1
    -------------------------Decrease
    -------------------------Collaring
    --------------------Band2
    -------------------------Decrease
    .....и т.д.


    Вопрос:

    поскольку в самом классе присутствует :

    Public mudtprops As PolicyType
    Как раз mudtprops и имеет вышеуказанную древовидную структуру ВНУТРИ класса. Но когда создаю экземпляр класса (класс Private - нельзя сделать Public), то теряю доступ к переменным класса, то есть не имею доступа ни к одной из переменных.
    Теперь вопрос - поскольку мне нужна именно вышеуказанная древовидная структура - как можно ее получить? ("рисовать" свойства для класса бессмысленно- нарушается древовидность: т.е конечно фактически доступ к переменным получить можно через свойства, но этот доступ не обеспечивает вышеописанное дерево.)
    Единственное до чего пока додумалась - это насоздавать дополнительных классов: класс Band со свойствами Decrease и Collaring, его родитель - класс NCDType, а его родитель - класс Policy Но это решение какое-то тупое. Может есть другое?
    Любые предложения, советы или мысли в вслух очень приветствуются.

    Зараннее всем спасибо
     
  2. skysun

    skysun Гость

    Я не совсем понял ход твоей мысли, но, по-моему, Вы усложняете. В VB есть коллекции, которые могут содержать в т.ч. и другие коллекции. Можно легко создать любую древовидную структуру.
    -colA
    |_colB
    | |_var1
    | |_varN
    |_colC

    и т.д
     
Загрузка...
Похожие Темы - Vb6 доступ переменным
  1. dEND
    Ответов:
    0
    Просмотров:
    91
  2. Никита29
    Ответов:
    0
    Просмотров:
    440
  3. alexandr777
    Ответов:
    0
    Просмотров:
    436
  4. Edgar4
    Ответов:
    2
    Просмотров:
    1.271
  5. TheDemetrius11
    Ответов:
    1
    Просмотров:
    1.220

Поделиться этой страницей