Sender-Nr auslesen
-
Hallo,
ich arbeite in meinem Prog zur Ansprache der Buttons viel mit:dynamic_cast<TButton*>(Sender)->NameKann ich den Buttonnamen auch auslesen z.B. in Form eines Strings?
Mein Button heißt z.B. Button3, ist es möglich nun den Sring auszulesen, um dann an die Nummer 3 zu kommen? Diese Brauche ich nämlcih für weitere Befehle als Integer.Habt ihr Ideen?
-
Hallo
natürlich kannst du den Namen des Buttons auch weiterbearbeiten. Dazu kannst du die AnsiString-Funktion wie SubString() und AnsiPos() benutzten.
Allerdings eignet sich Button::Tag wesentlich besser für eine ID einzelner Controls.Tag hat keine vordefinierte Bedeutung. Sie können in dieser Eigenschaft zusätzliche Informationen über die Komponente in Form einer Ganzzahl speichern oder die Eigenschaft in einen 32-Bit-Wert, wie z.B. in eine Komponentenreferenz oder einen Zeiger, umgewandelt werden.
Du legst also einfach einen eigenen Wert für jeden Button fest, denn du dann direkt weiterverarbeitest.
bis bald
akari
-
Marc0 schrieb:
ist es möglich nun den Sring auszulesen, um dann an die Nummer 3 zu kommen?
Ähmm... ja!
Du hast ihn doch bereits ausgelesen, oder?Außerdem
1.) eignet sich die Eigenschaft "Tag" für diese Aufgabe mglw. besser.
und
2.) solltest du noch den Zeiger den du durch dynamic_cast erhältst noch auf NULL prüfen. Bevor das hier ein Moderator sieht.
-
Sorry ich verstehe die Funktion nicht ganz, wie meinst du das?
Kannst du mir ein Beispiel geben?Wie würde ich denn nun z.B. Button4 ansprechen, wobei 4 einer Variablen entspricht?
Sender = Button+i ?!?!
HILFE, aber trotzdem vielen Dank!
-
Marc0 schrieb:
Button3, ist es möglich nun den Sring auszulesen, um dann an die Nummer 3 zu kommen? Diese Brauche ich nämlcih für weitere Befehle als Integer.
Vielleicht schon mal die Methoden von AnsiString angeschaut?
Ausserdem sei mir noch die Anmerkung gestattet, dass du mit der Zeile
dynamic_cast<TButton*>(Sender)->Nameden einzigen aber durchaus nützlichen Vorteil von dynamic_cast in den Wind schiesst.
Frage: Was passiert, wenn der Zeiger nicht ein TButton ist? Tip: Die Funktion dynamic_cast merkts, aber was passiert noch?-junix
-
@ dasd
Was meinst du mit Zeiger auf Null setzten? Wie geht das?
Sorry kann euch nicht ganz folgen, dachte hier den alles rettenden Befehl gefunden zu haben...
-
Hallo
ganz einfach.
Zur Entwurfszeit im Objektinspektor wählst du die betreffenden Buttons aus und vergibst jedem einzelnen in der Eingenschaft Tag eine eindeutige Nummer, die mit der Zahl im Namen übereinstimmt.
Dann kannst du die Auswertung der ID so machen :TButton *CurrButton = dynamic_cast<TButton*>(Sender); if (CurrButton != NULL) { int ID = CurrButton->Tag; // eventuell brauchst du ID nicht als extra Variable }bis bald
akari
-
Marc0 schrieb:
Sorry ich verstehe die Funktion nicht ganz, wie meinst du das?
Kannst du mir ein Beispiel geben?WAS verstehst du denn nicht? Ich kann dir hunderte Beispiele geben zu verschiedenen Funktionen (welche meinst du eigentlich?) aber ich bin mir nicht sicher ob ich das treffen werde was du suchst.
Wie würde ich denn nun z.B. Button4 ansprechen, wobei 4 einer Variablen entspricht?
Schau mal in die FAQ, Abschnitt Komponenten, Artikel "Zugriff aber nicht durch namen". Einen handlichen Index der FAQ findest du als festgepinnten Thread hier im Forum.
Dasd schrieb:
2.) solltest du noch den Zeiger den du durch dynamic_cast erhältst noch auf NULL prüfen. Bevor das hier ein Moderator sieht.
Willst du damit was bestimmtes sagen? (o;
-
Marc0 schrieb:
Sorry kann euch nicht ganz folgen, dachte hier den alles rettenden Befehl gefunden zu haben...
Wo hast du den denn gefunden? Hast du mal nachgelesen was der Befehl macht?
-
Die Methode wird nur von verschiedenen Buttons aufgerufen, ist das dann noch ein Problem?
-
Das ich die Funktion auch von Hand aufrufen kann und wenn ich dann ganz böse bin vielleicht ein TPanel das ich noch irgendwo rumliegen habe übergeben...
-junix
-
Ahja, und nein, es ist im moment grad nicht wichtig ob du das machst oder nicht. Es geht alleine darum ob der code so sicher ist. Vorsichtsmassnahmen kann man dann weg lassen, wenn man die Konsequenzen kennt.