AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Label aus anderer Unit verwenden

Ein Thema von Fractal · begonnen am 16. Apr 2014 · letzter Beitrag vom 17. Apr 2014
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:55
Besser schon, aber der Tipp richtet sich an einen Anfänger der noch nicht alle Funktionen kennt (und kennen muss) und vor allem eine simple Möglichkeit den Fehler so schnell zu finden. Denn er nutzt ja einen Label und kein Edit. Ist die Fehlerquelle erst einmal lokalisiert, wird sie beseitigt und kommt nicht erneut vor. Somit ist eine permanente Überprüfung unnötig.

Arbeitet man mit Edit, so dass der Nutzer fehlerhafte Zahlen eingeben kann, kommt man um eine korrekte Überprüfung, wie z. B. mit deiner Funktion, nicht herum.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#2

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:58
Oder man geht davon dau, dass in dem Label immer eine "Zahl" steht und verwendet StrToInt.
Im Fehlerfall liefert das dann automatisch eine entsprechende Fehlermeldung und man sieht daß dort was nicht stimmt.

Bei StrToIntDef würde der Fehler ungehört einfach untergehen ... das ist dann wie ein try ... except {nix} end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Fractal

Registriert seit: 16. Apr 2014
9 Beiträge
 
#3

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:20
Danke erstmal für eure Antworten!

Habs mal soweit abgeändert, jedoch häng ich immer noch am selben Problem wie vorhin, siehe hier.
(Und ja, ihr seht schon, dass ich >9000 Units hab, aber wills für den Anfang erstmal so probieren.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#4

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:31
Dein Richtig1.Show; heißt in Wirklichkeit Self.Richtig1.Show; . (Delphi macht das Self innerhalb von Methoden automatisch implizit davor)

Also, du gehst da über die Instanz des Fensters auf die Komponenten, welche darin liegen, bzw. eigentlich auf die Felder (Variablen), welche publisched in der Klasse deklariert sind.
Will man auf eine andere Form, dann braucht man eine Variable, in welcher die Instanz zu dieser Form abgelegt ist und kann daber dann auch auf deren Eigenschaften zugreifen.


(Und ja, ihr seht schon, dass ich >9000 Units hab, aber wills für den Anfang erstmal so probieren.)
Dann simmt (A) mit dem Design deiner Anwendung grundsätzlich etwas nicht. (ich wette viele der Fenster sind im Prinzip "gleich" aufgebaut und unterscheiden sich nur im "Inhalt" weniger Dinge)
und (B) solltest du gerade dann deine Units, Klassen, Variablen und vorallem Komponenten aussagefähig benennen damit man schon am Namen erkennt um was es sich handelt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:43
@Fractal

Also der Code ist jetzt richtig, womit wir zu dem kommen was evtl. Sir Rufo meinte: was ist seine Intention (oder so in der Art)? Oder anders gefragt - hat die Funktion Zugriff auf Label Zahl?

Laut Bild ist es die "Unit3", und das Fenster hat den Namen "Ergebnisse", Klasse "TErgebnisse". Die Prozedur mit der Rechnung ist in der Klasse "TFrage1". Daraus folgt - das Label "Zahl" ist auf dem Formular "Ergebnisse" und wird aus "TFrage1.SpeedButton2Click" aufgerufen.

Ich weiß zwar nicht wie das intern aussieht, aber "Ergebnisse.Zahl.Caption := ..." könnte die Lösung sein.
  Mit Zitat antworten Zitat
Fractal

Registriert seit: 16. Apr 2014
9 Beiträge
 
#6

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 20:07
Ich weiß zwar nicht wie das intern aussieht, aber "Ergebnisse.Zahl.Caption := ..." könnte die Lösung sein.
Damit hats funktioniert, danke .

(Um den Counter wieder auf 0 zu setzen):
Code:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  n := StrToIntDef(Ergebnisse.Zahl.caption, 0);
  n := 0;
  Ergebnisse.Zahl.caption := IntToStr(n);
end;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 20:18
Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := IntToStr(0);
end;
Würde auch gehen.

Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := '0';
end;
Auch.

Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := '';
end;
Würde aber auch gehen, wegen StrToIntDef(n, 0);
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:26
himitsu, ich kann dir nicht widersprechen, denn wie kann man etwas widersprechen was eigentlich richtig ist. Aber die Frage die sich hier stellt ist nun mal - muss ein Anfänger alles wissen? Muss er try except kennen, muss er mit dem Debugger umgehen können, muss er wissen wie man in der Regel die Fehler findet, oder kann er sich behelfsmäßig helfen?

Du bist doch ein Erfahrener Programmierer, oder? Wie viele Funktionen kennst du die bei Fehler (wobei ein fehlender Wert auch eine Art Fehler ist) einen negativen Result liefern, z. B. -1. Oder ShellExecute. Alles unter 32 als Result ist Fehler. Es ist also nichts ungewöhnliches eine Zahl einen Fehler darstellt.

Und was StrToIntDef angeht, die Funktion ist für dieses Beispiel schon ok, denn es erlaubt z. B. die Captions am Anfang auf "" zu löschen. Bei der ersten Operation wird aus dem leeren String dann eine Null. Der Sinn ist also da.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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