Anfängerfrage: Cast oder "as Object"

01/04/2008 - 16:13 von Jens Duczmal | Report spam
Hallo Newsgroup,

ich nehme mal als Beispiel das ToolStrip.
Dieses hat eine Items-Auflistung bei der dann
ein ToolStripItem zurückgegeben wird.

Das kann dann ja, je nach Art z.B. ein
ToolStripButton, ToolStripLabel, ToolStripTextbox etc. sein.

Alle sind natürlich vom ToolStripItem abgeleitet.

Soweit, so gut, so klar.

Wenn die Controls zur Entwurfszeit angelegt worden sind,
macht IntelliSense ja auch keine Sorgen.

Aber wenn ich die zur Laufzeit erstelle und dann abfrage,
stellt sich mir folgendes "Problem":

Dim itm as ToolStripItem

for each itm in bla

Wenn ich nun über itm.xxxxx eine Eigenschaft setzen will,
bekomme ich logischerweise nur die ToolStripItem-Properties.

Ergo sehe ich nur zwei Möglichkeiten:

Dim btn as ToolStripButton
btn = cType(itm,ToolStripButton) (oder TryCast/DirectCast)
btn.Checked = True

und

dim btn as Object
btn = itm
btn.Checked = True?

Vom Prinzip her muss ja beides irgendwie gecastet werden.
Geht die "as Object"-Geschichte auf die Performance?
Mal abgesehen davon, das ein Fehler auftritt, wenn man eine
nicht vorhandene Property so abfrage (den kann man ja abfangen)

Ich frage nur so dàmlich, weil ich unterschiedliche
ToolStripItems in einen Interface kapseln muss. (COM-Geschichte)
Und das COM keine Vererbung unterstützt und CType in VB6
unbekannt ist, bleibt mir da wohl keine bessere Möglichkeit.

Gruß und Danke,
Jens

PS: Ich habe wirklich nichts Gescheites für diese an für sich
simple Frage im Inet gefunden :-) Ein bischen Peinlich ist
mir die Fragestellung ja schon.
 

Lesen sie die antworten

#1 Lutz Elßner
01/04/2008 - 16:35 | Warnen spam

Dim btn as ToolStripButton
btn = cType(itm,ToolStripButton) (oder TryCast/DirectCast)
btn.Checked = True




Ich bevorzuge DirectCast, das àndert in einen Typ, den das Object schon hat.
CType versucht umzuwandeln.

Vorher kannst du testen ob es funktionieren wird:

If TypeOf itm Is ToolStripButton Then
..= DirectCast(itm,ToolStripButton)

ElseIf TypeOf itm Is ToolStripLabel Then
..= DirectCast(itm,ToolStripLabel)


Lutz

Ähnliche fragen