Properties VB 2010

Larry Laffer

Super-Moderator , User des Jahres 2008-2009
Teammitglied
Beiträge
15.504
Reaktionspunkte
3.824
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin gerade beim oben genannten Thema über eine Ausführungsform gestolpert.
Properties für Klassen anlegen und deren Sinn ist kein Problem.
Nun möchte ich aber eine Property wie z.B. eine Location erzeugen, die ja wieder Unterelemente hat (in dem Fall X und Y).
Wie erstelle ich mir also so eine, dann wieder Unter-Elemente hat ?

Gruß
Larry
 
Hallo Larry,
hab hier mal eine Beispielklasse für dich:

Code:
Class BeispielLocation
    Structure Loc
        Dim x As Single
        Dim y As Single
    End Structure
    Private m_Location As Loc

    Public Property Location() As Loc
        Get
            Return m_Location
        End Get
        Set(ByVal value As Loc)
            m_Location = value
        End Set
    End Property
End Class
Du gibst deiner Property einfach den gewünschten Datentyp mit.
So sollte das funktionieren.

Gruß
R.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ronnie,
funktioniert leider nicht so wie gewünscht.

Das Ziel ist es, bei einem Steuerelement, dessen Eigenschaften in gleicher Weise, wie oben schon beschrieben, sichtbar zu machen. Der Bezeichner wird so zwar in den Eigenschaften ausgewiesen, nicht aber dessen Unterelemente und schon gar nicht deren Inhalt. Ich kann auch auf die Property nicht zugreifen.
Ich muß allerdings auch gestehen, dass ich es recht ähnlich auch schon versucht habe.
Mir ist auch klar dass diese Property vom Typ her eine eigene Klasse sein muß, die auch außerhalb des Steuerelements bekannt ist. Es funktioniert nur leider nicht so, wie gewünscht ... :rolleyes:

Sicherlich ist ein relativ simpler Trick dabei - ich kenne ihn nur nicht ...

Gruß
Larry
 
Hallo 4L,
nein, den suche ich nicht - ich kenne aber seine Bedeutung.

Ich beschreibe es einfach noch einmal :
Ich habe für mein Steuerelement diverse Properties erzeugt - das funktioniert schon.
Nun möchte ich einige davon in einer Haupt-Rubrik (ich nenne es mal so) zusammenfassen wie z.B. bei der Property Location (die ja die Unter-Eigenschaften X und Y hat). Dieses soll nicht einfach nur im Programmcode (via Intellisense) funktionieren sondern auch auf der grafischen Benutzer-Oberfläche, wenn ich dass Steuerelement irgendwo plaziere.

Es soll also aus "myProp1" und "myProp2" und "myProp3" werden :
"myMainProp" mit den genannten Unterelementen (ich weiß allerdings nicht, ob man das im Fachjargon auch so nennt).

Gruß
Larry
 
:confused: denk dran, ich bin fast 50 - du musst in vollständigen Sätzen und sinnvollen Erklärungen mit mir posten ...

Kann schon sein, dass ich eine PropertyCollection haben möchte. Kannst du mir entsprechend meiner Anfrage da ein Beispiel geben ? Bitte keinen Link auf irgendwas aus der MSDN - da steht nur Müll drin. Gleiches gilt für irgendwelche "Fachforen" dazu ...

Gruß
Larry
 
:confused: denk dran, ich bin fast 50 - du musst in vollständigen Sätzen und sinnvollen Erklärungen mit mir posten ...

Kann schon sein, dass ich eine PropertyCollection haben möchte. Kannst du mir entsprechend meiner Anfrage da ein Beispiel geben ? Bitte keinen Link auf irgendwas aus der MSDN - da steht nur Müll drin. Gleiches gilt für irgendwelche "Fachforen" dazu ...

Gruß
Larry

also was ich meine war eine AttributCollection :rolleyes:

füge vor jede Property die zu einer Gruppe gehören soll

Code:
<System.ComponentModel.Category("KategorieName")> _

ein ... so bekommst du die erstmal visuell gruppiert...

warum das mit dem struct nicht passt, verstehe ich noch nicht so recht, versuche es gerade selber nachzuvollziehen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 4L,
das mit dem System.Componentmodel hatte ich auch schon mal gefunden (interessanterweise hier und nicht in irgendwelchen MS-Foren).

Das Problem bei der Sache ist nicht das machen, sondern das Herausfinden, wie die Syntax ist bzw. welchen Befehl man nimmt. Zu den einschlägigen MS-Foren habe ich da mittlerweile auch schon ein gestörtes Verhältnis. Das was man da so zu lesen bekommt ist entweder unverständlich oder kompletter Unsinn. Da reiht sich dann die MSDN ganz gut ein ... :rolleyes: - das was da drin steht wird zwar vermutlich stimmen, nur oft ist es so, das man nach Lesen einer Rubrik dann auch nicht schlauer ist, wie vorher.

Aber das ist ja ein anderes Thema ... ich würde mich natürlich freuen, wenn du da etwas herausfindest ...

Gruß
Larry
 
so Larry...

bau dir eine BasisKlasse für die zusammenzufassenden Eigensschaften...

Code:
*

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

    Private _firstName As String
    Private _lastName As String
    Private _age As Integer

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set(ByVal value As String)
            Me._firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get
        Set(ByVal value As String)
            Me._lastName = value
        End Set
    End Property

    Public Property Age() As Integer
        Get
            Return _age
        End Get
        Set(ByVal value As Integer)
            _age = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Dim text As String = _firstName & ";" & _lastName & ";" & _age
        Return text
    End Function
End Class

und dann brauchst du in deiner controlklasse fast nur noch die property anlegen

Code:
*

Public pInfo As New Person()

    Public Property Info() As Person
        Get
            Return pInfo
        End Get
        Set(ByVal Value As Person)
            pInfo = Value
        End Set
    End Property
 

Anhänge

  • vb.JPG
    vb.JPG
    12,1 KB · Aufrufe: 11
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 4L,
recht herzlichen Dank. Das war es ... hast du auch sehr schön dargestellt.
Jetzt aber meine Frage dazu wieder :
Ohne die Function toString funktioniert es denn auch nicht so, wie gewünscht. Ich habe dann auch mal nach Info's zu den verwendeten Komponenten "TypeConverter" etc. gesucht. Damit wäre ich dann auch nicht weiter gekommen.
Da ich aber meinen (eigenen Larry-internen) Such-Algorithmus verbessern möchte - wie und wo hast du das gefunden ...?

Gruß
Larry
 
die toString() zu ersetzen ergab sich durch die anzeige, denn da wurde der name der klasse dargestellt und der kommt ja aus toString ...

also eher erfahrung verknüpft mit einer gesunden try-catch-finally-mentalität als ein guter such-algorithmus...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 4L,
recht herzlichen Dank. Das war es ... hast du auch sehr schön dargestellt.
Jetzt aber meine Frage dazu wieder :
Ohne die Function toString funktioniert es denn auch nicht so, wie gewünscht. Ich habe dann auch mal nach Info's zu den verwendeten Komponenten "TypeConverter" etc. gesucht. Damit wäre ich dann auch nicht weiter gekommen.
Da ich aber meinen (eigenen Larry-internen) Such-Algorithmus verbessern möchte - wie und wo hast du das gefunden ...?

Gruß
Larry

Weitere interessante Sachen im Porperty Grid kannst du noch mit einem eigenen UITypeEditor machen.

Und generelle Infos zum Propertygrid gibts hier: http://msdn.microsoft.com/de-de/library/aa302326.aspx#ID0EHJAC
 
Na ... so toll ist mein Such-Algorithmus ja nun auch nicht ...
Und mein Try-Catch hat dann eben auch nur (bei mir) Exceptions erfasst ...

deinem try-catch fehlt das finally :ROFLMAO:

bin zuerst auch auf das struct reingefallen. aber das geht gar nicht ... habe in dem zug aber gleich noch raugefunden, was man mit listen und arrays in den eigenschaften so tolles anstellen kann :rolleyes:
 
... habe in dem zug aber gleich noch raugefunden, was man mit listen und arrays in den eigenschaften so tolles anstellen kann :rolleyes:

Sag an ... was hast du noch so entdeckt ? Vielleicht ist ja auch noch was für mich dabei ...


@Jochen:
Über das Propertygrid bin ich auch schon irgendwann einmal gestolpert ... ohne es jedoch so recht einordnen zu können ...
Ich werde mir deinen Link aber auf jeden Fall auch noch zu Gemüte führen ...

Nachsatz @Jochen:
außer dem natürlich, was du hier zu einem ähnlich lautenden Thread schon gepostet hast - das hatte ich auch sofort verstanden ... ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sag an ... was hast du noch so entdeckt ? Vielleicht ist ja auch noch was für mich dabei ...

ARRAY

Code:
*

    Private pArray As String()

    Public Property Array() As String()
        Get
            Return pArray
        End Get
        Set(ByVal value As String())
            pArray = value
        End Set
    End Property

attachment.php


LIST

Code:
*

    Private pList As List(Of Person)

    Public Property List() As List(Of Person)
        Get
            Return pList
        End Get
        Set(ByVal value As List(Of Person))
            pList = value
        End Set
    End Property

attachment.php


DROPDOWN

Code:
*

    Public Enum SortFilter
        FirstName
        LastName
        Age
    End Enum

    Private _dropDown As SortFilter

    Public Property DropDown() As SortFilter
        Get
            Return _dropDown
        End Get
        Set(ByVal value As SortFilter)
            _dropDown = value
        End Set
    End Property

attachment.php
 

Anhänge

  • array.JPG
    array.JPG
    40,5 KB · Aufrufe: 24
  • list.JPG
    list.JPG
    53,2 KB · Aufrufe: 24
  • dropDown.jpg
    dropDown.jpg
    6,3 KB · Aufrufe: 25
Noch toller finde Ich das PropertyGrid in Verbindung mit den ApplicationSettings! So kann man ganz einfach Einstellungen in sein Programm einbauen ohne großartig was zu Programmieren. Einfach dem Propertygrid die Settings instanz des Programms zuweisen.

(sieh auch : meinnm LibNoDaveDatenbankprotokoller, dort wird das für die Einstellungen verwendet!)

ARRAY

Code:
*

    Private pArray As String()

    Public Property Array() As String()
        Get
            Return pArray
        End Get
        Set(ByVal value As String())
            pArray = value
        End Set
    End Property

attachment.php


LIST

Code:
*

    Private pList As List(Of Person)

    Public Property List() As List(Of Person)
        Get
            Return pList
        End Get
        Set(ByVal value As List(Of Person))
            pList = value
        End Set
    End Property

attachment.php


DROPDOWN

Code:
*

    Public Enum SortFilter
        FirstName
        LastName
        Age
    End Enum

    Private _dropDown As SortFilter

    Public Property DropDown() As SortFilter
        Get
            Return _dropDown
        End Get
        Set(ByVal value As SortFilter)
            _dropDown = value
        End Set
    End Property

attachment.php
 

Dazu noch mal nachträglich ein herzliches Danke - ich hatte jetzt mal etwas Zeit mich mit dem Inhalt dieses Links auseinanderzusetzen. Der war wirklich Klasse - nun habe ich noch ein paar "Schweinereien" in meinen Properties gebaut, die ich mir vorher gar nicht anzufragen getraut hätte.

Also ... manchmal weiß man erst nach ein paar Tagen, was die Leute einem da an tollen Links posten ...

Gruß
Larry
 
Zurück
Oben