Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Alle Einträge in einer Combobox löschen ausser einen
DD - Mi 16.07.03 14:37
Titel: Alle Einträge in einer Combobox löschen ausser einen
Folgendes: Ich habe eine Combobox in der eine Menge Strings drin sind. Jetzt möchte ich, dass alle Strings gelöscht werden ausser ein bestimmter, der an irgendeiner Position in der Combobox ist.
Bisher sieht das alles so aus:
Delphi-Quelltext
1: 2: 3: 4: 5:
| for zaehler:=combobox1.items.Count-1 downto 0 do begin if combobox1.items[zaehler]<>'xyz' then combobox1.Items.delete(zaehler); (..) |
Warum funktioniert das nicht? Delphi meckert nicht aber löscht immer alle Strings in der Combobox.
Danke im Vorraus
DD
Edit: Danke fürs Moderieren, jedoch stimmte der Titel nicht mehr ganz. Wie man einzelne Einträge löscht weiss ich. Habe den Titel nochmal geändert.
Moderiert von
Tino: Delphi-Tags hinzugefügt & Titel geändert.
Christian S. - Mi 16.07.03 15:14
Wäre es nicht viel einfacher, es so zu machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var temp : String; begin temp := ComboBox1.Items[ComboBox1.Items.IndexOf('xyz')]; ComboBox1.Items.Clear; ComboBox1.Items.Add(temp); end; |
So in etwa. Habe leider kein Delphi drauf und seit 'ner Weile nicht mehr geproggt, werden also ein paar Fehler drin sein, aber irgendwie so sollte es gehen.
MfG
Peter
DD - Mi 16.07.03 16:12
Hmm gibt es da nicht eine Variante so wie ich mir das vorgestellt habe?
Aber schonmal danke für den Tip. Hat zwar bisher noch nicht so ganz funktoniert aber trotzdem.
Hat hier niemand sonst ne Lösung?
DD
Tino - Mi 16.07.03 16:24
Ich kann bei deinem Code keinen Fehler endecken. Ich hab es deshalb selbst einmal ausprobiert und es funktioniert auf jeden Fall mit der folgenden Procedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Idx: Integer; begin For Idx := ListBox1.Items.Count -1 Downto 0 Do If ListBox1.Items [Idx] <> 'abc' Then ListBox1.Items.Delete (Idx); |
Gruß
Tino
Christian S. - Mi 16.07.03 16:26
Habe inzwischen mal Delphi installiert:
(1) Dein Quelltext funktioniert bei mir.
(2) Auch mein Quelltext funktioniert bei mir.
Der Fehler muss also an anderer Stelle liegen. Mein Testprogramm sieht so aus: 1 ComboBox, 1 Editfeld und 1 Button. Es sollen alle Einträge gelöscht werden, außer dem, der den gleichen Text besitzt wie der Text, der im Edit-Feld steht.
Der Quelltext sieht dann so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var temp : String; begin temp := ComboBox1.Items[ComboBox1.Items.IndexOf(edit1.text)]; ComboBox1.Items.Clear; ComboBox1.Items.Add(temp); end; |
oder so
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); VAR zaehler : Integer; begin for zaehler:=combobox1.items.Count-1 downto 0 do begin if combobox1.items[zaehler]<>edit1.text then combobox1.Items.delete(zaehler); end; end; |
aus.
Und beides funktioniert.
MfG
Peter
//edit: zu langsam ... :(
StefanH - Mi 16.07.03 16:28
Drehs mal um:
Delphi-Quelltext
1: 2:
| for i:=0 to ComboBox1.count-1 do [...] |
Sonst weiß ich nichts
@Peter Lustig: das geht nicht, denn wenn es 2mal 'xyz' gibt, was dann?
Stefan
Tino - Mi 16.07.03 16:35
| StefanH hat folgendes geschrieben: |
| Drehs mal um: |
Das wird dann aber nicht funktionieren. Wenn du z. B. das Item mit dem Index 3 löscht verschieben sich alle folgenden Items eine Stelle nach oben. Das heißt das das nächste Item wieder den Index 3 hat. Die Schleife ist aber schon bei 4. Es wird also ein Item übersprungen.
Also immer bei Lösch-Aktionen rückwärts zählen lassen!
Gruß
Tino
Christian S. - Mi 16.07.03 16:36
@StefanH: Im ersten Posting verwendet DD die Formulierung "ein bestimmter" Eintrag. Deswegen bin ich davon ausgegangen, dass es nicht mehrere gibt.
Dein Quelltext wird jedoch nicht funktionieren, da dann Items übersprungen werden.
MfG
Peter
//edit: @Tino: so langsam wird's zur Gewohnheit
DD - Mi 16.07.03 16:52
Also es gibt mehrere Items (um genau zu sein 23).
Löschen geht nur rückwärts wie schon gesagt wurde. Deswegen kann ich das nicht umdrehen. Ich verstehe auch echt nicht, wo da ein Fehler sein soll bei mir im Quelltext, da es eigentlich ganz genau das ist was Tino geschrieben hat.
Bin ratlos...woran könnte es denn dann liegen????
MfG DD
Christian S. - Mi 16.07.03 17:01
| Zitat: |
| Also es gibt mehrere Items (um genau zu sein 23). |
War schon klar. StefanH und ich bezogen uns darauf, ob es genau ein Item gibt, welches stehen bleiben soll oder ob es mehrere Items gibt, die verschont werden sollen.
| Zitat: |
| Ich verstehe auch echt nicht, wo da ein Fehler sein soll bei mir im Quelltext, da es eigentlich ganz genau das ist was Tino geschrieben hat. |
Wie ich auch schon geschrieben habe, liegt der Fehler definitiv nicht in dem geposteten Quelltext.
Am besten postest Du mal ein bisschen mehr Quelltext drum herum, vielleicht zeigt sich dann etwas!
MfG
Peter
DD - Mi 16.07.03 17:13
So habe jetzt einfach mal den kompletten Quelltext genommen. Die Namen der Komponenten sind jetzt etwas anders also wundert euch nicht, wenn da was von Runelords und Pistol steht, ich brauche das für ein Fantasygameprojekt.
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) ArmyPointCombo: TComboBox; ArmyPointlbl: TLabel; RaceCombo: TComboBox; Racelbl: TLabel; btgoon: TButton; ComboBox1: TComboBox; Troopselectlbl: TLabel; ComboBox2: TComboBox; ComboBox3: TComboBox; ComboBox4: TComboBox; ComboBox5: TComboBox; ComboBox6: TComboBox; ComboBox7: TComboBox; ComboBox8: TComboBox; ComboBox9: TComboBox; ComboBox10: TComboBox; ComboBox11: TComboBox; ComboBox12: TComboBox; ComboBox13: TComboBox; ComboBox14: TComboBox; ComboBox15: TComboBox; ComboBox16: TComboBox; MagicItemsEdit1: TEdit; MagicItemsEdit2: TEdit; MagicItemsEdit3: TEdit; MagicItemsEdit4: TEdit; MagicItemsEdit5: TEdit; MagicItemsEdit6: TEdit; MagicItemsEdit7: TEdit; MagicItemsEdit8: TEdit; MagicItemsEdit9: TEdit; MagicItemsEdit10: TEdit; MagicItemsEdit11: TEdit; MagicItemsEdit12: TEdit; MagicItemsEdit13: TEdit; MagicItemsEdit14: TEdit; MagicItemsEdit15: TEdit; MagicItemsEdit16: TEdit; lblmagicitems: TLabel; Comboweapon1: TComboBox; lblweapons: TLabel; Comboweapon2: TComboBox; Comboweapon3: TComboBox; Comboweapon4: TComboBox; Comboweapon5: TComboBox; Comboweapon6: TComboBox; Comboweapon7: TComboBox; Comboweapon8: TComboBox; Comboweapon9: TComboBox; Comboweapon10: TComboBox; Comboweapon11: TComboBox; Comboweapon12: TComboBox; Comboweapon13: TComboBox; Comboweapon14: TComboBox; Comboweapon15: TComboBox; Comboweapon16: TComboBox; Comboarmour1: TComboBox; lblarmour: TLabel; lblnumber: TLabel; Editnumber1: TEdit; Editnumber2: TEdit; Editnumber3: TEdit; Editnumber4: TEdit; Editnumber5: TEdit; Editnumber6: TEdit; Editnumber7: TEdit; Editnumber8: TEdit; Editnumber9: TEdit; Editnumber10: TEdit; Editnumber11: TEdit; Editnumber12: TEdit; Editnumber13: TEdit; Editnumber14: TEdit; Editnumber15: TEdit; Editnumber16: TEdit; Comboarmour2: TComboBox; Comboarmour3: TComboBox; Comboarmour4: TComboBox; Comboarmour5: TComboBox; Comboarmour6: TComboBox; Comboarmour7: TComboBox; Comboarmour8: TComboBox; Comboarmour9: TComboBox; Comboarmour10: TComboBox; Comboarmour11: TComboBox; Comboarmour12: TComboBox; Comboarmour13: TComboBox; Comboarmour14: TComboBox; Comboarmour15: TComboBox; Comboarmour16: TComboBox; bttest: TButton; procedure btgoonClick(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private public procedure zwergeincombo; procedure goonvisible; end;
var Form1: TForm1; zaehler,zaehler2: integer;
implementation
{$R *.dfm}
procedure TForm1.btgoonClick(Sender: TObject); begin Showmessage('You choose an army of '+Racecombo.text+' with '+ArmyPointCombo.Text); goonvisible; if RaceCombo.text='Dwarfs' then begin zwergeincombo; end end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin if combobox1.Text='Runelord' then begin showmessage('Runelord ausgewählt'); for zaehler:=comboweapon1.Items.count-1 downto 2 do begin comboweapon1.Items.Delete(zaehler); end end else if combobox1.text='Lord' then begin showmessage('Lord ausgewählt'); for zaehler:=comboweapon1.items.Count-1 downto 0 do begin if comboweapon1.items[zaehler]<>'Pistol' then comboweapon1.Items.delete(zaehler); end; end end;
procedure Tform1.zwergeincombo; begin for zaehler:=combobox1.Items.count-1 downto 22 do begin combobox1.Items.delete(zaehler); end; for zaehler:=combobox2.Items.count-1 downto 22 do begin combobox2.Items.delete(zaehler); end; for zaehler:=combobox3.Items.count-1 downto 22 do begin combobox3.Items.delete(zaehler); end ; for zaehler:=combobox4.Items.count-1 downto 22 do begin combobox4.Items.delete(zaehler); end ; for zaehler:=combobox5.Items.count-1 downto 22 do begin combobox5.Items.delete(zaehler); end ; for zaehler:=combobox6.Items.count-1 downto 22 do begin combobox6.Items.delete(zaehler); end ; for zaehler:=combobox7.Items.count-1 downto 22 do begin combobox7.Items.delete(zaehler); end ; for zaehler:=combobox8.Items.count-1 downto 22 do begin combobox8.Items.delete(zaehler); end ; for zaehler:=combobox9.Items.count-1 downto 22 do begin combobox9.Items.delete(zaehler); end ; for zaehler:=combobox10.Items.count-1 downto 22 do begin combobox10.Items.delete(zaehler); end ; for zaehler:=combobox11.Items.count-1 downto 22 do begin combobox11.Items.delete(zaehler); end ; for zaehler:=combobox12.Items.count-1 downto 22 do begin combobox12.Items.delete(zaehler); end ; for zaehler:=combobox13.Items.count-1 downto 22 do begin combobox13.Items.delete(zaehler); end ; for zaehler:=combobox14.Items.count-1 downto 22 do begin combobox14.Items.delete(zaehler); end ; for zaehler:=combobox15.Items.count-1 downto 22 do begin combobox15.Items.delete(zaehler); end ; for zaehler:=combobox16.Items.count-1 downto 22 do begin combobox16.Items.delete(zaehler); end end;
procedure Tform1.goonvisible; begin Combobox1.Visible:=true; Combobox2.Visible:=true; Combobox3.Visible:=true; Combobox4.visible:=true; Combobox5.visible:=true; Combobox6.visible:=true; Combobox7.Visible:=true; Combobox8.Visible:=true; Combobox9.Visible:=true; Combobox10.Visible:=true; Combobox11.visible:=true; Combobox12.visible:=true; Combobox13.visible:=true; Combobox14.visible:=true; Combobox15.visible:=true; Combobox16.visible:=true; troopselectlbl.Visible:=true; Comboweapon1.visible:=true; Comboweapon2.visible:=true; Comboweapon3.visible:=true; Comboweapon4.visible:=true; Comboweapon5.visible:=true; Comboweapon6.visible:=true; Comboweapon7.visible:=true; Comboweapon8.visible:=true; Comboweapon9.visible:=true; Comboweapon10.visible:=true; Comboweapon11.visible:=true; Comboweapon12.visible:=true; Comboweapon13.visible:=true; Comboweapon14.visible:=true; Comboweapon15.visible:=true; Comboweapon16.visible:=true; lblweapons.visible:=true; Comboarmour1.visible:=true; Comboarmour2.visible:=true; Comboarmour3.visible:=true; Comboarmour4.visible:=true; Comboarmour5.visible:=true; Comboarmour6.visible:=true; Comboarmour7.visible:=true; Comboarmour8.visible:=true; Comboarmour9.visible:=true; Comboarmour10.visible:=true; Comboarmour11.visible:=true; Comboarmour12.visible:=true; Comboarmour13.visible:=true; Comboarmour14.visible:=true; Comboarmour15.visible:=true; Comboarmour16.visible:=true; lblarmour.visible:=true; Editnumber1.visible:=true; Editnumber2.visible:=true; Editnumber3.visible:=true; Editnumber4.visible:=true; Editnumber5.visible:=true; Editnumber6.visible:=true; Editnumber7.visible:=true; Editnumber8.visible:=true; Editnumber9.visible:=true; Editnumber10.visible:=true; Editnumber11.visible:=true; Editnumber12.visible:=true; Editnumber13.visible:=true; Editnumber14.visible:=true; Editnumber15.visible:=true; Editnumber16.visible:=true; lblnumber.visible:=true; MagicItemsEdit1.visible:=true; MagicItemsEdit2.visible:=true; MagicItemsEdit3.visible:=true; MagicItemsEdit4.visible:=true; MagicItemsEdit5.visible:=true; MagicItemsEdit6.visible:=true; MagicItemsEdit7.visible:=true; MagicItemsEdit8.visible:=true; MagicItemsEdit9.visible:=true; MagicItemsEdit10.visible:=true; MagicItemsEdit11.visible:=true; MagicItemsEdit12.visible:=true; MagicItemsEdit13.visible:=true; MagicItemsEdit14.visible:=true; MagicItemsEdit15.visible:=true; MagicItemsEdit16.visible:=true; lblmagicitems.visible:=true; end;
end. |
vielleicht entdeckt ja jetzt jmd. woran es liegen kann. Das Programm läuft mit dem Quelltext, jedoch löscht er immer alle Items aus der Combobox namens Comboweapon1
Christian S. - Mi 16.07.03 17:38
Hm, so auf anhieb sehe ich da nichts. Hast Du mal einen Breakpoint an die Stelle gesetzt und das Ganze im Einzelschrittverfahren getestet?
MfG
Peter
Keldorn - Mi 16.07.03 18:14
Hallo
welche Werte stehen denn in der Combobox?
dir ist aber klar das combobox1.items[zaehler]<>'xyz' im gegensatz zu indexof groß und klein unterscheidet. dh. wenn in der Combobox xYz steht und du auf xyz prüfst, kommst du mit deinem Vergleich nicht weiter.
wo werden die Werte zugewiesen ? viellecihst schleicht sich auch irgendow ein leerzeichen ein.
mfg Frank
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!