![]() |
Doppelten String nicht übergeben
Hallo zusammen
ich gebe von den Zellen 11 und 12 eines StringGrids den inhalt an ein Eidt feld jetzt möcht ich aber die doppelten Einträge nicht übergeben wie mache ich das
Delphi-Quellcode:
Danke schonmal
procedure TForm7.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String); var spalte, ueberschri :Integer; begin with TStringList.Create do try for spalte:= 11 to 12 do begin ueberschri:= Count; StringGrid1.Cols[Spalte]:= DupIgnore;// so geht es nicht AddStrings(StringGrid1.Cols[spalte]); Delete(ueberschri); end; Edit1.Text:= StringReplace(Text, sLineBreak, '', [rfReplaceAll]); finally Free; end; |
Re: Doppelten String nicht übergeben
Delphi-Quellcode:
Oder versteh ich Dich falsch?
with TStringList.Create do
try Duplicates := dupIgnore; |
Re: Doppelten String nicht übergeben
So funzt es auch nicht
wenn ich in der spalte [11,1] z.b. Hallo eingebe und ich gebe in der spalte [11.2] auch Hallo ein soll es nicht an edit1 übergeben werden |
Re: Doppelten String nicht übergeben
Ahh du möchtest, dass Hallo dann überhaupt nicht drin auftaucht?
|
Re: Doppelten String nicht übergeben
Genao so
Wenn ich zweimal eingegeben habe soll es nur einmal im Edit feld drinstehen genauso bei dreimal usw. Irgenwas mit Duplicates := dupIgnore; ?? |
Re: Doppelten String nicht übergeben
dann funktionierts auch mit dubIgnore. dann ist lediglich deine verwendung falsch. Mit dubIgnore erreichst du das in eine Stringlist nur etwas hinzugefügt werden kann wenn es noch nicht drin ist.
|
Re: Doppelten String nicht übergeben
Dafür brauch ich doch diese Variable
Delphi-Quellcode:
um die ganzen zellen zu übergeben
(StringGrid1.Cols[spalte])
|
Re: Doppelten String nicht übergeben
Hab jetzt mal viele Variationen versucht aber irgendwie klappt das nicht
|
Re: Doppelten String nicht übergeben
Hilft vielleicht nicht bei der Problemlösung, aber
dupIgnore funktioniert nur wenn bei der StringList sorted auf true gesetzt wird. Grüße Klaus |
Re: Doppelten String nicht übergeben
Das heisst ich müsste erst ne neue Stringlist erzeugen??
|
Re: Doppelten String nicht übergeben
Nun, wenn Du die Stringlist sortierst ändert sich auch die Reihenfolge
in der die Strings in der Liste angeordnet sind. Ich weiß nicht ob Du das willst? Wenn Du nur zwei Spalten auf Einträge überprüfen willst die schon vorhanden sind, warum gehst Du dann nicht Zeile für Zeile die Spalten durch und schaust nach ob ein Eintrag mit dem Eintrag Deines Editfeldes übereinstimmt.
Delphi-Quellcode:
Grüße
for i:=0 to StringGrid1.rowCount -1 do
begin if StringGrid1.Cells[11,i] <> Edit1.text then // füge hinzu else // mache nichts end; Klaus |
Re: Doppelten String nicht übergeben
Das ist eigentlich egal es wre sogar besser wenn es sotiert wäre
|
Re: Doppelten String nicht übergeben
Hallo Sascha,
das sollte in etwas so gehen:
Delphi-Quellcode:
Habe es nicht getestet.
var
sl: TStringList; begin sl := TStringList.create; sl.sorted := true; // Liste sortieren Modus sl.duplicated := dupIgnore; // keine doppelten Einträge sl.assign(StringGrid1.cols[11]); // zuweisen der Spalte 11 in die StringListe sl.add(edit1.text); // hinzufügen des neuen Textes, wenn doppelt wird er nicht hinzugefügt StringGrid1.cols[11].assign(sl); // zuweisen der StringListe in die Spalte 11 sl.free; // freigeben der StringListe end; Grüße Klaus |
Re: Doppelten String nicht übergeben
Naja funktioniert nicht ganz
|
Re: Doppelten String nicht übergeben
Dann musst Du "was" tun, damit es klappt.
... Sorry, ist genauso ne Antwort wie die Aussage "funktioniert nicht ganz" ;) Ich denke, das zuweisen per Add(andereliste.Text) kann auch bzgl. dupIgnore nicht funktionieren, wenn müssten alle getrennt zugewiesen werden (for i := ... to Count do Add(liste[i])...). |
Re: Doppelten String nicht übergeben
Verstehe deinen satz nicht genau meinst du die Spalten von das vom Klaus war doch schon ganz gut oder verstehe ich da was nicht
|
Re: Doppelten String nicht übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe mal mit dem StringGrid ein wenig rumespielt und festgestellt,
daß das OnSetEditText Ereignis zu jedem Tastendruck abgefeuert wird der im EditModus in einer Zelle getätigt wird. Und das ist denkbar ungünstig zu nutzen um zu überprüfen ob eine Text/String schon in der Spalte vorhanden ist. Ist es in Deinem Programm nicht möglich, die Dateneingabe getrennt vom StringGrid zu machen? Das würde die Suche nach Duplikaten erheblich vereinfachen. Ich hätte mir das so vorgestellt:
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var i:Byte; gefunden:Boolean; begin gefunden:=false; for i:=0 to StringGrid1.RowCount -1 do if StringGrid1.Cells[1,i] = edit1.Text then begin gefunden:=true; end; if not gefunden then begin StringGrid1.RowCount := StringGrid1.RowCount +1; StringGrid1.Cells[1,StringGrid1.RowCount -2]:=Edit1.Text; end; end; Klaus |
Re: Doppelten String nicht übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
So ab mal die funktion vom StringGrid angehäng
Wenn mann in der spalte 11 und 12 was eingibt werden diese ans Edit weiter gegeben und vom Edit ans label Was ich jetzt gerne machen würde ist das im label keine doppelten einträge stehen ob die jetzt vom Editfeld oder vom Stringgrid gefiltert werden ist eigentlich egal komm einfach nicht weiter Hoffe es hilft weiter quelltext ist auch dabei |
Re: Doppelten String nicht übergeben
Zitat:
habe mir Deinen Quelltext noch nicht angeschaut, aber wenn das Label alle die Informationen hat welche schon eingegeben wurden, dann kannst Du das auch nur anhand des Labels überprüfen ob die gleichen Daten schon vorhanden sind. Ich würde das machen wenn die Eingabe vom Edit in das Label geht. Hier kannst Du z.B. mit pos überprüfen, ob der Edit Inhalt im Label schon vorhanden ist.
Delphi-Quellcode:
Grüße
if (pos(Edit1.Text,label1.caption) > 0 then
// Eintrag vorhanden else // Eintrag nicht vorhanden Klaus |
Re: Doppelten String nicht übergeben
funktioniert leider auch nicht
Kann es sein das es nicht funktioniert weil der eingegebene text als ganzer string eingelesen wird und deshalb nicht geprüft wird ? in den letzten zwei spalten im StringGrid werden nur abkürzungen max 2 buchstaben eigegeben und dann muss noch ein komma gesetzt werden das es besser zu lessen ist im Label das ist die einzige trennung de gesetzt werden muss |
Re: Doppelten String nicht übergeben
Zitat:
geändert wird. Dein Zellentext wird also Zeichenweise in das Editfeld und auch das Label übertragen. Damit wird eine Überprüfung die auf Wortbasis basiert unmöglich. Entweder Du suchst Dir ein event das ausgelöst wird, wenn Du mit dem Editieren fertig bist - da habe ich noch keines gefunden - oder eines wenn Du die Zelle verlässt - habe ich auch noch keines gefunden - oder Du machst noch einen Button auf die Form (mit Namen überprüfen/übernehmen o.ä) wo Du dann die Zellinhalte überprüfen und gegebenenfalls anmeckern kannst. Hier bin ich mit meinem Latein am Ende. Grüße Klaus |
Re: Doppelten String nicht übergeben
Hallo Sascha,
wenn die Anzeige unbedingt permament aktualisiert werden soll, dann so:
Delphi-Quellcode:
Freundliche Grüße
function ColsToStr(sg: TStringGrid; colNums: array of Integer): string;
var iCol, iRow: Integer; s: string; begin with TStringList.Create do try Sorted := True; for iCol := Low(colNums) to High(colNums) do for iRow := sg.FixedRows to Pred(sg.RowCount) do begin s := Trim(sg.Cols[colNums[iCol]][iRow]); if (s <> '') and (IndexOf(s) < 0) then Add(s); end; Result := CommaText; finally Free; end; end; procedure TForm1.StringGridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); begin Edit1.Text := ColsToStr(StringGrid, [11, 12]); end; |
Re: Doppelten String nicht übergeben
Genau das wars
Dank dir und natürlich auch ein danke an klaus für seine mühen konnte auch die sachen vom klaus für was anderes benutzen hab. danke euch beiden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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