![]() |
Zugriff auf Label.Tag
Guten Morgen, Allerseits.
Ich kann mit
Delphi-Quellcode:
auf das Tag zugreifen, nicht aber mit
str := Label1.Tag.ToString;
Delphi-Quellcode:
Fehlermeldung: "E2010 Inkompatible Typen: 'Integer' und 'object'"
n := Label1.Tag;
Jetzt wollte ich mir mit
Delphi-Quellcode:
behelfen, aber das klappt nicht, denn
n.Parse(str);
Delphi-Quellcode:
bringt dann als Ergebnis immer '0'.
Text := n.ToString;
Wie kann ich nun auf den Integerwert im Tag zugreifen? Danke im Voraus. mfg gfjs |
Re: Zugriff auf Label.Tag
hmm, wenn du eine direkte Zuweisung vornimmst aka
Delphi-Quellcode:
dann solltest du so
label1.Tag := 13;
Delphi-Quellcode:
einwandfrei darauf zugreifen koennen.
label1.Tag as Int32
Wenn du hingegen das Tag im OI gesetzt hast, ist es iirc ein String. Den Int-Wert herhaelst du dann mit
Delphi-Quellcode:
(ungetestet)
Int32.Parse(label1.Tag as string)
greetz Mike |
Re: Zugriff auf Label.Tag
Zitat:
Delphi-Quellcode:
jedenfalls unter Voraussetzung: n ist Integer, und Tag wurde ein Integer zugewiesen.
n := (int)Label1.Tag;
// oder so: n := Convert.ToInt32(Label1.Tag); Hintergrund: In der FCL gibt es fast niemals 'reine' Datentypen, sondern alles sind Klassen (auch Integer). Vermutlich deshalb ist Control.Tag nicht als Integer, sondern als Object deklariert. Beim Schreiben konvertiert CLR den Integer automatisch in ein Integer-Object; beim Lesen muss man manuell konvertieren. Gruß Jürgen |
Re: Zugriff auf Label.Tag
@ Jürgen Thomas + JasonDX
Vielen Dank für Eure schnelle Antwort. Ich habe frmSpielplan_Activated mit
Delphi-Quellcode:
die Tags als Integer zugewiesen. Das hat auch geklappt, denn wenn ich mit
Tag := i;
Delphi-Quellcode:
die Tags anzeigen lasse, klappt es problemlos.
str := dummy.Tag.ToString;
Delphi-Quellcode:
und
n := int(dummy.Tag) as Int 32;
Delphi-Quellcode:
bringen folgende Fehlermeldung:
n := int(dummy.tag);
[Pascal Fehler] uSpielplan.pas(154): E2250 Es gibt keine überladene Version von 'Int', die man mit diesen Argumenten aufrufen kann
Delphi-Quellcode:
bringt keine Fehlermedlung aber mit str := n.ToString; das falsche Ergebnis '0'.
n := Convert.ToInt32(dummy.Tag);
Ich bleibe also so ratlos wie vorher. mfg gfjs |
Re: Zugriff auf Label.Tag
Zitat:
Delphi-Quellcode:
sollte funktionieren.
dummy.Tag as Int32
Zitat:
Die Stichworte hier sind Boxen und Unboxen. Bei der zuweisung
Delphi-Quellcode:
"boxt" du die 1 (als Integer) in ein object. (Structs muessen erst auf objects geboxt werden, im Gegensatz zu Klassen). Und du musst nun dummy.Tag "unboxen", um aus dem object wieder einen Integer zu machen. Und dafuer reicht ein purer Typecast:
dummy.Tag := 1;
Delphi-Quellcode:
greetz
dummy.Tag as Int32
//oder Int32(dummy.Tag) Mike |
Re: Zugriff auf Label.Tag
Hallo,
was hier gemacht werden muss, ist das Boxing eines Integer in ein Object. Dazu muss man auch bei der Zuweisung aufpassen:
Delphi-Quellcode:
Damit ist nämlich der Typ des Objekts festgelegt.
Label1.Tag := Int32(12345);
Jetzt kann man wieder mittelns Unboxing
Delphi-Quellcode:
darauf zugreifen.
I := Int32(Label1.Tag);
Gruß xaromz |
Re: Zugriff auf Label.Tag
@ JasonDX
Hallo, Mike. Mit
Delphi-Quellcode:
klappt's jetzt endlich.
n := (sender as System.Windows.Forms.&Label).Tag as Int32;
Einen Extra-Dank für Deine ausführliche Erklärung. @ xaromz Auch mit
Delphi-Quellcode:
klappt's, obwohl ich bei der Zuweisung nur
n := Int32((sender as System.Windows.Forms.&Label).Tag);
Delphi-Quellcode:
anstelle von
Label1.Tag := i;
Delphi-Quellcode:
verwendet habe.
Label1.Tag := Int32(i);
mfg und vielen Dank Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz