Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem in der Schleife.. (Done)
Terra23 - So 01.06.03 14:31
Titel: Problem in der Schleife.. (Done)
Hi ihr.
Ich habe ein Problem mit folgender Schleife:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TFischform.ZubClick(Sender: TObject); begin NGrid.RowCount:=NGrid.RowCount+1; For Z:=0 To NGrid.RowCount-1 Do Begin If (NGrid.Cells[0, Z]=P1.Text) And (NGrid.Cells[1, Z]=P2.Text) Then Begin ShowMessage('Dieser Spieler existiert bereits.'); End Else Begin NGrid.Cells[0, NGrid.RowCount-1]:=P1.Text; NGrid.Cells[1, NGrid.RowCount-1]:=P2.Text; End; End; P1.Clear; P2.Clear; If NGrid.RowCount>1 Then NGrid.FixedRows:=1; end; |
Ich habe zwei Edit-Felder (P1 & P2) und ein StringGrid(NGrid). Wenn ich nun den Button klicke, sollen die Werte aus P1 und P2 in die Zeilen eingetragen werden, die oben angegeben sind. Nun habe ich aber das Problem, daß in dem StringGrid nur 2 Spalten (ColCount=2) und eine Zeile (RowCount=1) ist. In dieser Zeile steht nach Programmstart "Name" in der einen Spalte & "Vorname" in der anderen drin (daher If NGrid.RowCount...). Ich bekomme bei Eintragung die Meldung, der Spieler existiere bereits, obwohl er der erste Spieler ist, der eingetragen wird. Nun bin ich heute irgendwie nicht ganz bei mir und kann den Fehler nicht finden (muß an der Sonne liegen). Kann mir jemand schnell auf die Sprünge helfen und mich mal kneifen, damit ich hier aufwache?
Brueggendiek - So 01.06.03 23:52
Titel: Re: Problem in der Schleife..
Hallo!
So sollte es funzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TFischform.ZubClick(Sender: TObject); var z:longint; vorhanden:Boolean;
begin vorhanden := False;
For Z:=1 To NGrid.RowCount-1 Do begin If (NGrid.Cells[0, Z]=P1.Text) And (NGrid.Cells[1, Z]=P2.Text) Then Begin ShowMessage('Dieser Spieler existiert bereits.'); vorhanden := True; end; End;
if not vorhanden then begin NGrid.RowCount:=NGrid.RowCount+1; NGrid.Cells[0, NGrid.RowCount-1]:=P1.Text; NGrid.Cells[1, NGrid.RowCount-1]:=P2.Text; NGrid.FixedRows:=1; end;
P1.Clear; P2.Clear; end; |
Da das Grid die 1. Zeile fest hat, darf die Schleife nur ab der 2. Zeile (Row=1) laufen!
Das Vergrößern des Grids sollte auch nur erfolgen, wenn was eingefügt wird (bei Deinem Source wird jedesmal eingefügt, auch wenn der Name schon existiert - leere Einträge sind die Folge). Beim Einfügen weiß ich ja, daß mehr als 1 Zeile da sind, so daß ich damit FixedRows setzen kann.
Die Variable z deklarieren wir bitte lokal, sonst kann es bei der ereignisgesteuerten Windows-Programmierung zu Seiteneffekten kommen (keiner weiß, was alles gleichzeitig läuft, z.B. auf Timer- Tastatur- und Mausereignisse!)
Gruß
Dietmar Brüggendiek
Terra23 - Mo 02.06.03 00:28
Ja, danke. Es funktioniert. Am Anfang hat meine Prozedur auch funktioniert, nur dann habe ich ein paar Dinge umgestellt und die Position verändert, dann kam es so, daß ich bei jedem Eintrag diese Meldung bekam. Jetzt geht es wieder, danke. :-) Schönen Abend noch..
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!