# Properties VB 2010



## Larry Laffer (16 Oktober 2010)

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


----------



## ronnie.b (17 Oktober 2010)

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


```
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.


----------



## Larry Laffer (17 Oktober 2010)

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 ... 

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

Gruß
Larry


----------



## vierlagig (18 Oktober 2010)

Larry Laffer schrieb:


> Der Bezeichner wird so zwar in den Eigenschaften ausgewiesen, nicht aber dessen Unterelemente und schon gar nicht deren Inhalt.



ist 
	
	



```
Inherits
```
 der Trick, den du suchst?


----------



## Larry Laffer (18 Oktober 2010)

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


----------



## vierlagig (18 Oktober 2010)

ich verstehe...


```
PropertyCollection
```


----------



## Larry Laffer (18 Oktober 2010)

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


----------



## vierlagig (18 Oktober 2010)

Larry Laffer schrieb:


> 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 ...
> 
> ...



also was ich meine war eine AttributCollection 

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


```
<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...


----------



## Larry Laffer (18 Oktober 2010)

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 ...  - 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


----------



## Jochen Kühner (18 Oktober 2010)

*Attribut...*

Also in Csharp gings glaube Ich wenn due die Property mit
 [TypeConverter(typeof(ExpandableObjectConverter))]
Attributierst!

Wenn es das ist was du gesucht hast...

Infos dazu auch hier:
http://www.bluevisionsoftware.com/WebSite/TipsAndTricksDetails.aspx?Name=ExpandableObjectConverter


----------



## vierlagig (18 Oktober 2010)

so Larry...

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


```
*

<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


```
*

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
```


----------



## Larry Laffer (19 Oktober 2010)

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


----------



## vierlagig (19 Oktober 2010)

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...


----------



## Larry Laffer (19 Oktober 2010)

Na ... so toll ist mein Such-Algorithmus ja nun auch nicht ...
Und mein Try-Catch hat dann eben auch nur (bei mir) Exceptions erfasst ...


----------



## Jochen Kühner (19 Oktober 2010)

Larry Laffer schrieb:


> 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.
> ...



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


----------



## vierlagig (19 Oktober 2010)

Larry Laffer schrieb:


> 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 

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


----------



## Larry Laffer (19 Oktober 2010)

vierlagig schrieb:


> ... habe in dem zug aber gleich noch raugefunden, was man mit listen und arrays in den eigenschaften so tolles anstellen kann


 
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 ...


----------



## vierlagig (19 Oktober 2010)

Larry Laffer schrieb:


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



ARRAY


```
*

    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
```







LIST


```
*

    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
```






DROPDOWN


```
*

    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
```


----------



## Jochen Kühner (19 Oktober 2010)

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!)



vierlagig schrieb:


> ARRAY
> 
> 
> ```
> ...


----------



## Larry Laffer (26 Oktober 2010)

Jochen Kühner schrieb:


> Und generelle Infos zum Propertygrid gibts hier: http://msdn.microsoft.com/de-de/library/aa302326.aspx#ID0EHJAC


 
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


----------

