vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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 - Fortgeschrittene
ComboBox-Elemente 
Autor: isiraider
Datum: 19.11.07 10:40

Hallo allerseits,

ich durchlaufe alle Controls eines Formulars. Dabei übergebe ich jedes cCtrl As Control an eine Funktion. Diese durchläuft alle Properties des bis dahin unbekannten Controls...

In eine Datenbank habe ich für mich relevante Controls und deren für mich relevanten Properties. Beispiel:

Button --------- Text
Label ---------- Text
ToolStrip ----- Items ----- Text
ComboBox--- Items
usw...

Wenn ich beim Durchlaufen der Controls auf eine ComboBox und beim durchlaufen derer Properties auf Items treffe, dann caste ich die Property Items in eine enumerierbare Auflistung. Zu beachten ist, dass jedes Item in dieser Auflistung ein String ist.

Wie kann ich nun die Auflistungs-Elemente durchlaufen und Ihnen einen neuen String-Wert übergeben, so dass dann diese Werte am Ende in der ComboBox stehen? Bei der Zuweisung unten im Code oItem = "test" meckert der Compiler zwar nicht, aber am Ende steht dann in der ComboBox doch der ursprüngliche String.

Also cCtrl As Control wird übergeben und dann:

Dim tCtrlType As Type = cCtrl.GetType()   '>> Typ des Steuerelementes
Dim piPropertyInfo As PropertyInfo       '>> Eigenschaftsinformation 
' eines Objektes
 
For Each piPropertyInfo In tCtrlType.GetProperties()
 
   If tCtrlType.name.ToString() = "ComboBox" And piPropertyInfo.Name = Items _
     Then
 
      Dim collection As IEnumerable = TryCast(piPropertyInfo.GetValue(cCtrl, _
        Nothing), IEnumerable)
 
      For Each oItem As Object In collection
         oItem = "test"
      Next
 
   End If
 
Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComboBox-Elemente 
Autor: Melkor
Datum: 19.11.07 12:51

Die Items in ListBox und ComboBox können beliebige Objekte sein, und nicht unbedingt Strings. So viel dazu.

Deinen Code verstehe ich aber nicht.
oItem = was immer
wird wirkungslos sein, weil oItem bei jedem Durchgang einen Wert aus der Collection bekommt. Du solltest vermutlich die Items einfügen, mit etwa ILIst.Add().

Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComboBox-Elemente 
Autor: isiraider
Datum: 19.11.07 15:26

Hallo Melkor,

ich möchte aber keine neue Items hinzufügen, sondern die bereits bestehenden übersetzen...

oItem kriegt bei jedem Durchgang den jetzigen Wert aus der Collection. Das stimmt! Und im Falle meiner relevanten List- bzw. ComboBoxen kriegt oItem einen String-Wert. Ich möchte nun jedem Item in der List- bzw. ComboBox zur Laufzeit einen neuen Übersetzungswert zuweisen... Aber das oItem scheint nur readOnly zu sein...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComboBox-Elemente 
Autor: Melkor
Datum: 19.11.07 15:45

Mit IEnumerable kannst du nur lesen. Du brauchst hier IList und kannst il.Item(n) ansprechen.

Code wie
tCtrlType.name.ToString() = "ComboBox"
ist übrigens etwas umständlich, du kannst Type direkt vergleichen mit
If tCtrlType Is GetType(ComboBox) Then

Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComboBox-Elemente 
Autor: isiraider
Datum: 19.11.07 16:23

Hallo Melkor,

danke Dir! ich werde versuchen mit dieser IList zu arbeiten... wenn ich fragen habe, dann melde ich mich!

Du hast recht, dass das umständlich erscheint:

tCtrlType.name.ToString() = "ComboBox"
aber eigentlich heisst es:

tCtrlType.name.ToString() = reader.GetString(......)
der Typ des Controls ist als String in einer DB abgelegt und so muss ich den Namen des Typs vergleichen. Habe es hier nur zum besseren Verständnis so geschrieben! Aber ansonsten danke für den Hinweis! Dachte mir das IEnumerable nur zum Lesen ist...
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