vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Unter-Properties 
Autor: Drakonomikon
Datum: 23.03.11 18:21

Und ich habe Stunden rumgeknobelt. Unter anderem auch mit dem ExpandableObjectConverter sowie PropertyTags, etc. und nun ist die Lösung so simpel:

<TypeConverter(GetType(ExpandableObjectConverter))> _
    Public ReadOnly Property Line() As TimeLine
        Get
            Return m_TimeLine
        End Get
    End Property
Ich musste kein weiteres Object im Konstruktor anlegen. Das reicht auch so.
Danke für deine Hilfe.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Unter-Properties 
Autor: Drakonomikon
Datum: 23.03.11 01:56

Hallo,

ich habe folgendes Problem: Es existieren 3 Klassen

1) TimePanel
2) TimeLine
3) TimePeriod

Klasse 2 und 3 sind beides Unterklassen von 1. Nun gilt folgendes

 
Imports System.Collections.ObjectModel
 
Public Class TimePanel
 
    Inherits Panel
 
    Private m_TimeLine As TimeLine
    Private m_TimePeriod As Collection(Of TimePeriod)
 
    Public ReadOnly Property Line() As TimeLine
        Get
            Return m_TimeLine
        End Get
    End Property
 
    Public ReadOnly Property Period() As Collection(Of TimePeriod)
        Get
            Return m_TimePeriod
        End Get
    End Property
 
' usw...
 
End Class
Nun habe die Klassen 2 und 3 Eigenschaften wie beispielsweise:

    Private m_Enabled As Boolean = True
 
    Public Property Enabled() As Boolean
        Get
            Return m_Enabled
        End Get
        Set(ByVal SetEnabled As Boolean)
            m_Enabled = SetEnabled
            RaiseEvent PropertyChanged(Me)
        End Set
    End Property
Sonst nichts erwähnenswertes.

Möchte ich nun zur Entwicklungszeit im PropertyGrid des vb.net-Designer an den beiden Eigenschaften rumspielen, so gibt er für 'Period()' schön brav die Auflistung in einem DialogFeld wieder.
Aber für die Property 'Line()' steht dort nur in grauer Schrift 'TimePanel.TimeLine'.

Der Designer ist leider nicht so schlau die Properties von 'TimeLine' in einer Unterkategorie aufzulisten oder aber ein entsprechendes DialogFeld zu öffnen.

Das muss ja möglich sein, und zwar ohne eine eigene Form zu schreiben die ein PropertyGrid-Control enthält - nur wie? Bei vbArchiv gibt es zwar ein Tutorial über PropertyGrids aber das hat mir auch nicht weiter geholfen.

Die einzige Lösung die ich gefunden haben ist die hier:

    Public ReadOnly Property Line() As Collection(Of TimeLine)
        Get
            ' Fuschen für Fortgeschrittene
            Dim dummy As New Collection(Of TimeLine)
            dummy.Add(m_TimeLine)
            Return dummy
        End Get
    End Property
Aber mit der Methode kann ich gleich m_TimeLine als Collection definieren (brauch ich aber nicht, denn ein Element reicht mir als eine ganze Kollektion).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unter-Properties 
Autor: ModeratorFZelle (Moderator)
Datum: 23.03.11 11:34

Du musst hier 2 Sachen beachten.

1. Damit der Designer weiss wie er mit der Klasse umgehen soll, musst du dem Property ein <TypeConverter(GetType(ExpandableObjectConverter))>_ mitgeben.

2. Es muss ein Object geben, also musst du es auch im Konstruktor anlegen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unter-Properties 
Autor: ModeratorFZelle (Moderator)
Datum: 23.03.11 19:12

m_TimeLine musstest Du ja irgendwo angelegt haben, oder?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unter-Properties 
Autor: Drakonomikon
Datum: 23.03.11 19:42

Ja klar. Steht im ersten Post. In der Class TimePanel ist das definiert. Du meintest wahrscheinlich damit dass mir der Konstruktor zu m_TimeLine fehlt? Den habe ich ganz oben weggelassen, aber der ist natürlich vorhanden.

Falls es wen interessiert, der sieht so aus:

    Public Sub New()
        MyBase.New()
        InitializeComponent()
 
        m_TimeLine = New TimeLine
        m_TimePeriod = New Collection(Of TimePeriod)
 
        AddHandler m_TimeLine.PropertyChanged, AddressOf Handle_LineEvent
 
        If Not m_TimePeriod Is Nothing And m_TimePeriod.Count > 0 Then
            For Each TP As TimePeriod In m_TimePeriod
                AddHandler TP.PropertyChanged, AddressOf Handle_PeriodEvent
            Next
        End If
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unter-Properties 
Autor: ModeratorFZelle (Moderator)
Datum: 23.03.11 20:57

Nein, ich meinte das du eben m_Timeline im Konstruktor deines Controls anlegen musst, und das hast du ja hier getan.

Lässt du das hier weg, kannst du auch im Designer nichts editieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel