![]() |
Delphi-Version: 10.2 Tokyo
TCheckBox und das Bedingungsproblem
Moinsen Männers
und zwar habe ich das Problem, dass ich derzeit eine Art Kniffel mit Checkboxen erstelle. Jetzt ist das Ding, dass diese Checkbox nur Disabled und Gecheckt sein sollen, wenn das Labelfeld einen Wert zugewiesen bekommen hat. Das heißt, dass wenn nicht gewürfelt wurde, soll eine MessageBox auftauchen. Das tut es auch, aber zweimal, da sich durch das ( Sender as TCheckBox ).Checked := false; das OnClick doppelt auslöst. Wie kann ich nun den Code umschreiben, dass er es nicht mehr tut?
Code:
function TKnuffel.wurdeGewuerfelt : boolean;
begin if wuerfel1BBtn.Caption = '0' then begin result := false; Application.MessageBox('Bitte würfeln Sie erst!', 'Hinweis', mb_OK); end else result := true; end;
Code:
if ( Sender = player1CB3Pasch ) then
if wurdeGewuerfelt = false then begin ( Sender as TCheckBox ).Enabled := true; ( Sender as TCheckBox ).Checked := false; end else if wurdeGewuerfelt = true then if dreierPasch = true then begin wert1Label3Pasch.Caption := IntToStr( alleWuerfelErgebnis ); ergebnisUnten1(); ( Sender as TCheckBox ).Enabled := false; wuerfelReset(); if niSpielerAnz = 2 then begin spielerWechsel( Sender as TObject ); wuerfelReset(); end; end else if dreierPasch = false then begin MessageBox(0, 'Es ist kein Dreier Pasch vorhanden. Bitte wählen Sie etwas anderes!', 'Hinweis', MB_OK); ( Sender as TCheckBox ).Checked := false; end; |
AW: TCheckBox und das Bedingungsproblem
Zitat:
|
AW: TCheckBox und das Bedingungsproblem
Ich habe das Problem gefunden, haha. Probieren geht über Studieren!
Code:
anstatt:
if ( Sender as TCheckBox ).Checked then
Code:
if ( Sender = player2CB3Pasch )
|
AW: TCheckBox und das Bedingungsproblem
[OT] Tu Dir selbst einen Gefallen und gewöhn Dir Vergleiche mit true oder false wieder ab, das kann sonst zu unerwarteten Fehlern führen.
Delphi-Quellcode:
->
if Dings = true then
Code;
Delphi-Quellcode:
und
if Dings then
Code;
Delphi-Quellcode:
->
if Dings = false then
Code;
Delphi-Quellcode:
Grund: false ist mit 0 definiert und true mit 1. Es kann aber auch vorkommen, dass z.B. API-Funktionen von Windows als true eine -1 zurückgeben, dann schlägt der Vergleich fehl, und das ganze Programm macht Mist.
if not Dings then
Code; [/OT] |
AW: TCheckBox und das Bedingungsproblem
Okay, wusste ich nicht - danke für den Tipp!;)
|
AW: TCheckBox und das Bedingungsproblem
Zitat:
Zitat:
false ist als erster Wert des Aufzählungstyp Boolean definiert, true als zweiter. (Wobei bei der RTTI und TValue noch Spezialbehandlungen drin sind.) Der Ordinalwert ist dann natürlich schon 0 bzw 1. Wenn eine Funktion -1 zurückliefert, dann macht nicht das Programm Mist sondern der Compiler meldet einen Fehler. (Gilt nur sofern mit false und true die in unit System definierten gemeint sind) |
AW: TCheckBox und das Bedingungsproblem
Hi,
ich kenne Deinen Programmier-Kontext nicht, aber evtl. kannst Du auch mal versuchen, die Businesslogik von der GUI zu trennen. Das ist im ersten Moment etwas schwieriger, bringt aber mehr Übersicht in das Ganze. Du könntest eine Komponente für die Businesslogik erstellen, die alle Daten und Methoden beinhaltet:
Delphi-Quellcode:
Alle Daten und Methoden zur Datenänderung gehören dann in die Klasse.
TKnuffelBL = class
WurdeGewürfelt: Boolean; procedure Würfeln; end; Im Formular benutzt Du dann nur noch eine Klasseninstanz:
Delphi-Quellcode:
Alle Komponenten, greifen dann auf die BL-Komponente zu:
KuffelBL: TKnuffelBL;
... KnuffelBL := TKnuffelBL.Create;
Delphi-Quellcode:
CheckBox1.Enabled := KnuffelBL.WurdeGewürfelt;
... procedure Button1.OnClick(...) begin KnuffelBL.Würfeln. end; So hast Du schon mal eine schöne Trennung von Geschäftslogik und Benutzerschnittstelle. Das macht es später einfacher, das Projekt auszubauen. Am Anfang erscheint es vielleicht etwas kompliziert, aber es lohnt sich, sich mal mit dem Konzept auseinander zu setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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