![]() |
Button-Tag wird nicht erkannt
Hi
ich habe paralell zu diesem Thread ![]() mal versucht eine Lösung für die letzten Post zu erstellen. Wollte den Code da auch eigentlich als Beispiel posten. Nun habe ich aber selbst ein Problem: Das ist mein Code:
Delphi-Quellcode:
Nur Irgendwie bringt die Procedur onButtonClick kein Ergebnis.
unit Test_Unit;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Btn_1: TButton; Btn_2: TButton; Btn_3: TButton; Btn_4: TButton; procedure FormCreate(Sender: TObject); procedure Btn_1Click(Sender: TObject); procedure Btn_2Click(Sender: TObject); procedure Btn_3Click(Sender: TObject); procedure Btn_4Click(Sender: TObject); private { Private-Deklarationen } BtnNumber: Integer; procedure onButtonClick(Sender: TButton); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Randomize; BtnNumber := Random(3); end; procedure TForm1.onButtonClick(Sender: TButton); begin if Sender.Tag = BtnNumber then ShowMessage('Du hast den richtigen Button erwischt!'); end; procedure TForm1.Btn_1Click(Sender: TObject); begin onButtonClick(Btn_1); end; procedure TForm1.Btn_2Click(Sender: TObject); begin onButtonClick(Btn_2); end; procedure TForm1.Btn_3Click(Sender: TObject); begin onButtonClick(Btn_3); end; procedure TForm1.Btn_4Click(Sender: TObject); begin onButtonClick(Btn_4); end; end. Woran liegt das? Schonmal danke. MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Schonmal nen Breakpoint im onButtonClick gesetzt und geguckt, was da so für Werte in Tag und BtnNumber stehen?
Hast du die Tags überhaupt gesetzt? |
Re: Button-Tag wird nicht erkannt
Der Parameter Sender ist vom Typ TComponent du musst ihn zu einem Button casten:
Delphi-Quellcode:
if (Sender as TButton).Tag = ...
|
Re: Button-Tag wird nicht erkannt
Zitat:
|
Re: Button-Tag wird nicht erkannt
Die Eventmethode für den Buttonklick liefert den geklickten Sender als TComponent.
Und OOp heisst das eine abgeleitete Klasse an die Stelle der Superklasse treten kann, aber nicht umgekehrt! |
Re: Button-Tag wird nicht erkannt
Ist es denn schlimm, wenn ich hier den Sender als TButton direkt initialisiere,
Ich übergebe ja auch einen Button ;) Ich habe übrigens die Variable mal in einer MessageBox abgefragt ... der Wert ist drin ... Bitte um weitere Hilfe. MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Aber wozu hast du denn überhaupt nochmal die einzelnen OnClicks? Das ist doch genau was du mit der Unterscheidung nach Sender verhindern willst... So macht das ja gar keinen Sinn. ;-)
Schau doch im Debugger was passiert, setz doch einfach einen Haltepunkt auf das if. |
Re: Button-Tag wird nicht erkannt
Warum weist du nichtbei allen buttons die selbe Methode zu und entscheidest dann per Sender?
|
Re: Button-Tag wird nicht erkannt
Hallo,
poste doch mal das ganze Projekt als Zip ohne Exe (incl. der DFM). Ich sehe nirgendwo, dass du Tag zuweist. Ausserdem liefert Random(3) eine Zahl zwischen 0 und <3 zurück. Heiko |
Re: Button-Tag wird nicht erkannt
Zudem überschneidet sich der Thread themenmässig mit diesem:
![]() |
Re: Button-Tag wird nicht erkannt
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab ja auch geschrieben, dass die sich überschneiden ^^
Ich wollte das nur nicht auch noch in den Thread packen, weil er schon ziemlich lang ist. Der Übersicht halber. Werden die Tags nicht schon automatisch festgelegt? Wird der Sender automatisch angegeben? Ich habe vorher noch nie mit einem "ereignissorientiertem Framework" wie VLC/Delphi gearbeitet. MFG FC ;) Im Anhang ist das Projekt :) |
Re: Button-Tag wird nicht erkannt
Zitat:
Zitat:
|
Re: Button-Tag wird nicht erkannt
Sorry ... kommt nicht wieder vor :)
Naja bei mir im OI sind die Tags aber auch in der richtigen Reihenfolge durchnummeriert ;) MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang mal ein funktionierendes Beispiel, in dein Projekt schaue ich gleich.
// EDIT: Du hast bei den Buttons Tag nicht gesetzt, deshalb ist das eben 0, da ist nur TabOrder aufsteigend gesetzt, aber das passiert ja automatisch. |
Re: Button-Tag wird nicht erkannt
Zitat:
Und TButton ist doch ein Nachfahre von TComponent, und somit sollte das problemlos ohne Typecast funktionieren. |
Re: Button-Tag wird nicht erkannt
Vielen Dank für die Hilfe.
Ich habe jetzt bei mir einfach die TabOrder genommen. Dann klappts. Ich werde das ganze aber auch heute Abend mal mit Tags versuchen. Vielen Dank. MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Was ist da groß zu versuchen? Du musst doch nur in Delphi den Button anklicken und im Objektinspektor die Eigenschaft Tag entsprechend setzen. :gruebel:
|
Re: Button-Tag wird nicht erkannt
Ja ... das war jetzt nur mal so daher gesagt.
Nur damit du weißt, dass ich deinen Tipp annehme und ausprobiere. Ist doch das Mindeste was ich machen kann, wenn du dir schon die Mühe gemacht hast und dir mein Projekt runtergeladen hast. MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Hallo,
Zitat:
Du musst im Object-Insoector jedem ein anderes Tag eintragen. Oder per Code:
Delphi-Quellcode:
Heiko
FormCreate;
begin Btn1.Tag:= 1; Btn2.Tag:= 2; Btn3.Tag:= 3; Btn4.Tag:= 4; end; |
Re: Button-Tag wird nicht erkannt
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Screenshot
|
Re: Button-Tag wird nicht erkannt
Danke sehr.
Klappt jetzt alles ;) MFG FC ;) |
Re: Button-Tag wird nicht erkannt
Wenn ich richtig verstanden habe, so soll der Anwender einen zufällig ausgewählten Button drücken.
Zitat:
Beim Drücken eines der 4 Buttons abfragen, ob ihr Tag mit der Butonnummer übereinstimmt. Schreib doch einfach einen gemeinsamen Eventhändler für das OnClick Ereignis der 4 Buttons und Vergleiche Tag mit ButNummer
Delphi-Quellcode:
var
ButNummer: integer; procedure TForm1.FormActivate(Sender: TObject); begin ButNummer:= Random(3)+1; // 1..4 end; procedure TForm1.ButtonClick(Sender: TObject); // gemeinsamer EventHändler für begin // die vier Buttons with Sender as TButton do if Tag=ButNummer then lblOut.Caption:= 'Du hast den richtigen Button erwischt' else lblOut.Caption:= 'falsch, ButNummer= ' + IntToStr(ButNummer); ButNummer:= Random(3)+1; // für das nächste Spiel end; |
Re: Button-Tag wird nicht erkannt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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