Связь данных из свойств класса с объектами

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Связь данных из свойств класса с объектами

Сообщение natcap » 10.08.2010 (Вт) 18:46

Добрый день.

Есть класс, свойства которого тоже являются классами... что-то примерно такое:
Изображение

(конечные свойства - строки, числа, даты)

Теперь вопрос как это все редактировать пользователю..
1. Когда загружаю свой касс в PropertyGrid мои свойства, являющееся классами не раскрываются по (+), а прописывают название класса:
Изображение

как сделать чтобы видеть все дерево свойств класса?

2. Есть ли возможность связать данные с элементами на форме? Т.е. например TextBox1.text связать с свойством UserPortfolio.General.FaceInformation.UserName
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Связь данных из свойств класса с объектами

Сообщение Viper » 10.08.2010 (Вт) 22:20

Нужно для каждого класса для которого необходимо раскрывать свойства в дизайнере писать конвертор - класс наследуемый от TypeConvertor, после чего указывать этот класс конвертор в атрибуте TypeConvertor. В общем в MSDN смотреть класс TypeConvertor и все вокруг него. Достаточно сложно все на первый взгляд (да и на второй тоже).
Весь мир матрица, а мы в нем потоки байтов!

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Связь данных из свойств класса с объектами

Сообщение 1Steps » 11.08.2010 (Ср) 1:45

Код: Выделить всё
Imports System.ComponentModel
Imports System.Drawing.Design

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.PropertyGrid1.SelectedObject = New User
    End Sub
End Class

Public Class User
    Private _user As UserPortfolio

    Sub New()
        _user = New UserPortfolio
    End Sub

    ReadOnly Property UserPortfolio() As UserPortfolio
        Get
            Return _user
        End Get
    End Property
End Class

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class UserPortfolio
    Private _general As New General
    Private _matBase As New MaterialBase
    Private _someShit As New SomeShitElse

    ReadOnly Property General() As General
        Get
            Return _general
        End Get
    End Property

    ReadOnly Property MaterialBase() As MaterialBase
        Get
            Return _matBase
        End Get
    End Property

    ReadOnly Property SomeShitElse() As SomeShitElse
        Get
            Return _someShit
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return Me.GetType().Name
    End Function
End Class

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class General
    Private _face As New FaceInformation

    ReadOnly Property FaceInformation() As FaceInformation
        Get
            Return _face
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return Me.GetType().Name
    End Function
End Class

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class FaceInformation

    Enum SexEnum
        DontKnow = 0
        Female = 1
        Male = 2
    End Enum

    Private _name As String = "Pedro"
    Private _sex As SexEnum = SexEnum.DontKnow
    Private _color As Color = Color.Blue

    Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Property Sex() As SexEnum
        Get
            Return _sex
        End Get
        Set(ByVal value As SexEnum)
            _sex = value
        End Set
    End Property

    Property FaceColor() As Color
        Get
            Return _color
        End Get
        Set(ByVal value As Color)
            _color = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Me.GetType().Name
    End Function
End Class

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class MaterialBase
    Private _salary As Single = 1000000.0

    Property Salary() As Single
        Get
            Return _salary
        End Get
        Set(ByVal value As Single)
            _salary = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Me.GetType().Name
    End Function
End Class

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class SomeShitElse

    Private _someShit As Date = Now

    Property SomeShit() As Date
        Get
            Return _someShit
        End Get
        Set(ByVal value As Date)
            _someShit = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Me.GetType().Name
    End Function
End Class
Удалена за ненадобностью.

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Связь данных из свойств класса с объектами

Сообщение natcap » 11.08.2010 (Ср) 10:43

Вииии ! ЗАРАБОТАЛО :))) Спасибо обоим :)
НО остался еще пункт 2 :(

natcap писал(а):2. Есть ли возможность связать данные с элементами на форме? Т.е. например TextBox1.text связать с свойством UserPortfolio.General.FaceInformation.UserName
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Связь данных из свойств класса с объектами

Сообщение 1Steps » 12.08.2010 (Чт) 1:08

Код: Выделить всё
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim u As New User
        Me.TextBox1.Text = u.UserPortfolio.General.FaceInformation.Name
    End Sub

Или BindingSource.

А зачем понадобилось такое количество вложенных классов?
Почему не сделать все в одном, в двух?
Если это БД и неохота писать ручками, то смотри в сторону Dataset.
Удалена за ненадобностью.

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Связь данных из свойств класса с объектами

Сообщение natcap » 12.08.2010 (Чт) 1:16

Связь нужна двусторонняя, т.е. понятно что, можно при инициализации объекта заполнить текстовые поля, по событию редактирования отдавать значение обратно в объект.. но это чревато где-то что-то перепутать :(

BindingSource пытаюсь, но что-то не заполняется поле и не заносится при редактировании :(

А классы надо, иначе я потом не разгребу что откуда - данных очень много и с пересекающимися названиями
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

    TopList