![]() |
Sender soll den Titel des Formulars bestimmen
Ich wollte die Caption eines Formulars vom Sender abhängig machen
Ich weiss nicht, warum dieser Code nicht funktioniert
Delphi-Quellcode:
Wenn man den Speedbutton9 drückt, soll das Formular den Titel "Eintrag ändern"haben,
procedure TForm4.FormShow(Sender: TObject);
begin if Sender = Unit1.Form1.speedbutton9 then Form4.Caption := ' Eintrag ändern';//Unit4 if Sender = Unit1.Form1.Speedbutton11 then Form4.Caption :='Neuer Eintrag';//Unit4 end; end; bei Speedbutton11 den Tiel "Neuer Eintrag" haben. Liegst vielleicht daran, dass die Speedbuttons in einer anderen Unit sind ??? |
Re: Sender soll den Titel des Formulars bestimmen
Kommt eine Fehlermeldung oder geht er einfach kommentarlos darüber hinweg?
Hast Du Breakpunkte an die stellen gesetzt und das mal schrittweise durchlaufen? Sherlock |
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
Ist da was falsch am Code ???? Ich habs auch schon bei Form4.Create reingeschrieben, ist aber dasselbe |
Re: Sender soll den Titel des Formulars bestimmen
Wie zeigst Du denn das Formular an?
Evtl. wäre es besser, im OnClick der Speedbuttons den Titel zu setzen:
Delphi-Quellcode:
procedure TForm1.SpeedButton9Click;
begin with Form4 do begin Caption := 'Eintrag ändern'; Show; end; end; |
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
Delphi-Quellcode:
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin Unit4.Form4.Show; end; |
Re: Sender soll den Titel des Formulars bestimmen
Und woher weiß Unit4.Form4, dass Form1.SpeedButton9 der "Sender" ist? Den müßtest du schon noch irgendwie übergeben - oder nach dem Unit4.Form4.Show noch Unit4.Form4.FormShow(SpeedButton9) aufrufen.
|
Re: Sender soll den Titel des Formulars bestimmen
Oder eine Property definieren und vor dem Show setzen.
|
Re: Sender soll den Titel des Formulars bestimmen
Hallo,
Delphi-Quellcode:
Was kommt dabei heraus, wenn Du mal ein
procedure TForm4.FormShow(Sender: TObject);
begin if Sender = Unit1.Form1.speedbutton9 then Form4.Caption := ' Eintrag ändern';//Unit4 if Sender = Unit1.Form1.Speedbutton11 then Form4.Caption :='Neuer Eintrag';//Unit4 end; end; ... // sieht das in etwa so aus? // dann sollte es funktionieren Unit4.Form4.FormShow(Unit1.Form1.speedbutton9); // Hier tippe ich mal darauf, dass Sender nicht SpeedButton9 ist, sondern eventuell Form1. procedure TForm1.SpeedButton9Click(Sender: TObject); begin Unit4.Form4.Show; end;
Delphi-Quellcode:
in Dein FormShow einbaust?
ShowMessage(Sender.ClassName);
|
Re: Sender soll den Titel des Formulars bestimmen
Delphi-Quellcode:
Hier ist Sender immer Form4, es sei denn die Prozedur FormShow wurde manuell mit einem anderen Parameter aufgerufen. Wenn aber beim Anzeigen OnShow ausgelöst wurde, dann ist Sender das Formular selbst.
procedure TForm4.FormShow(Sender: TObject);
begin if Sender = Unit1.Form1.speedbutton9 then Form4.Caption := ' Eintrag ändern';//Unit4 if Sender = Unit1.Form1.Speedbutton11 then Form4.Caption :='Neuer Eintrag';//Unit4 end; end; Wenn du mit dem Button das Formular anzeigst, dann ändere dort doch einfach vorher die Caption. |
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
ShowMessage(Sender.ClassName) := TForm4
Delphi-Quellcode:
Das funktioniert nicht Fehler : zuviele Parameter
Unit4.Form4.FormShow(Unit1.Form1.speedbutton9);
|
Re: Sender soll den Titel des Formulars bestimmen
Sorry, verstehe die ganze weitere Diskussion nicht. Die Lösung wurde mit
Zitat:
|
Re: Sender soll den Titel des Formulars bestimmen
Da man davon ausgehen darf, dass es ja nicht nur um die Caption geht, bin ich nach wie vor der Meinung, eine Property ist hier zielführend (Trennung von Logik und Darstellung).
|
Re: Sender soll den Titel des Formulars bestimmen
Ja, vermutlich richtig!
Aber der Versuch, den Sender des OnShow() auszuwerten, sollte doch nun "vom Tisch sein" |
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
reinschreiben. Es gäbe noch die Möglichkeit
Delphi-Quellcode:
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin Unit4.Form4.Caption:='Eintrag ändern'; Unit4.Form4.Show; end; procedure TForm4.FormShow(Sender: TObject); begin if Form4.Caption = 'Eintrag ändern' then ...... if Form4.Caption = 'Neuer Eintrag' then ...... end; |
Re: Sender soll den Titel des Formulars bestimmen
Und genau das habe ich in #12 gemeint/befürchtet.
|
Re: Sender soll den Titel des Formulars bestimmen
Autsch, ja das ist wirklich nicht gut :shock:
//edit: Auch wenn ich gesteinigt werde: MINDESTENS für die Texte Konstanten verwenden! |
Re: Sender soll den Titel des Formulars bestimmen
Wenn es wirklich mehrere Dinge zu tun gibt, wäre der Weg über Properties oder eine eigene Show-Routine (als "CustomShow(...)") ggf. besser.
Da bietet sich auch eine Enumeration an:
Delphi-Quellcode:
Und dann einfach parametrisiert aufrufen:
type
TFormMode = (fmAdd, fmEdit); // oder noch mehr type TForm4 = class(TForm) // Komponenten private FFormMode: TFormMode; procedure SetFormMode(Mode: TFormMode); public property Mode: TFormMode read FFormMode write SetFormMode; end;
Delphi-Quellcode:
Nur so als Anregung...
Form4.Mode := fmAdd; // In SetFormMode wird dann die Initialisierung erledigt
Form4.Show; // oder auch mit eigener Show-Routine in Form4: Form4.ShowWithMode(fmAdd); Viele Grüße |
Re: Sender soll den Titel des Formulars bestimmen
Die zweite Möglichkeit erscheint mir eleganter!
|
Re: Sender soll den Titel des Formulars bestimmen
Jetzt sind wir da, wo ich hinwollte :zwinker:
|
Re: Sender soll den Titel des Formulars bestimmen
Hallo,
schonmal mit 'ner ActionList gearbeitet? Eine Action kann man mehreren Buttons, Menüeinträgen... zuordnen und dort im ActionExecute(Sender: TObject) kann man wunderbar in der gewünschten Form den Sender abfragen. Sender ist hier immer das Control, dass die Action ausgelöst hat.
Delphi-Quellcode:
// procedure TForm4.FormShow(Sender: TObject);
procedure TForm4.Action1Execute(Sender: TObject); begin if Sender = Unit1.Form1.speedbutton9 then Form4.Caption := ' Eintrag ändern';//Unit4 if Sender = Unit1.Form1.Speedbutton11 then Form4.Caption :='Neuer Eintrag';//Unit4 Form4.Show; end; |
Re: Sender soll den Titel des Formulars bestimmen
Dann hat er aber wieder das Problem, dass er später die Caption abfragt/abfragen muss. Ich bleibe dabei: Property einführen und gut is.
|
Re: Sender soll den Titel des Formulars bestimmen
Hallo DeddyH,
Zitat:
FormShow wird nicht mehr benötigt, die gesamte für dort geplante Logik, liegt in der Action und die ruft Form4.Show auf. Und damit ist Sender genau der Schalter, den Du noch zusätzlich einführen möchtest. |
Re: Sender soll den Titel des Formulars bestimmen
Ich denke mal einfach, dass der Status (oder wie man das auch nennen möchte) nicht nur im OnShow ausgewertet wird.
|
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
Form4.show muß in Form1.speedbutton9click aufgerufen werden, sonst erscheint nix wie wärs mit
Delphi-Quellcode:
const Konstante1: string= 'Neuer Eintrag' ;
Konstante2 :string='Eintrag ändern'; procedure TForm1.SpeedButton9Click(Sender: TObject); begin Unit4.Form4.Caption:=Konstante2; Unit4.Form4.Show; end; procedure TForm1.SpeedButton11Click(Sender: TObject); begin Unit4.Form4.Caption:=Konstante1; Unit4.Form4.Show; end; procedure TForm4.FormShow(Sender: TObject); begin if Form4.Caption = Konstante1 then ...... if Form4.Caption = Konstante2 then ...... end; |
Re: Sender soll den Titel des Formulars bestimmen
Nein :!: Siehe hier:
![]() |
Re: Sender soll den Titel des Formulars bestimmen
Funktioniert aber :-D
|
Re: Sender soll den Titel des Formulars bestimmen
Schon, ist aber wirklich eine schlechte Lösung!
|
Re: Sender soll den Titel des Formulars bestimmen
Zitat:
|
Re: Sender soll den Titel des Formulars bestimmen
Wenigstens einer, der mich versteht :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 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