Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Operanden Typ?!
TheD - Mi 16.04.03 20:22
Titel: Operanden Typ?!
Hallöchen,
Quelltext
1: 2: 3: 4: 5: 6: 7:
| for iForCBPort := 0 to ComboBoxPort.Items.Count -1 do begin if not (ComboBoxPort.Items.Strings[iForCBPort] in ('COM1' or 'COM2' or 'COM3')) then begin ComboBoxPort.Items.Delete(iForCBPort); end; //if end; //IForCBPort |
Damit möchte ich alle Einträge aus einer ComboBox löschen, die nicht COM1-COM3 heissen.
Aber ich erhalte ich der if-Zeile folgende Meldung:
[Error] Unit2.pas(70): Operator not applicable to this operand type
Was mach ich den falsch?
UGrohne - Mi 16.04.03 20:28
Probiers mal mit einem Vergleich mit
Quelltext
1:
| ['COM1', 'COM2','COM3'] |
wenn ich mich noch recht entisinne, komme nur grad net annen Delphi-Rechner ran.
Gruß
TheD - Mi 16.04.03 20:32
Dann heisst es:
[Error] Unit2.pas(70): Ordinal type required
[Error] Unit2.pas(70): Incompatible types: 'Integer' and 'String'
Weider in der if Zeile.
AndyB - Mi 16.04.03 22:17
Der
in-Operator gibt nur für
Sets. Und ein Set ist auf ordinale Typen (Char, Integer aller Art) beschränkt. Das was du vor hast geht aus diesem Grund nicht, weil ein String eben kein einfacher Typ ist sondern ein komplexer. Das Selbe Problem ergibt sich bei der
case of-Anweisung.
Man kann sich jedoch eine Abhilfe verschaffen, indem man die offenen Array Parameter ausnützt.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function IsStrIn(const Value: string; const Args: array of string): Boolean; var i: Integer; begin Result := True; for i := 0 to High(Args) do if Args[i] = Value then Exit; Result := False; end; |
Quelltext
1: 2: 3:
| begin if IsStrIn(ComPort, ['COM1', 'COM2', 'COM3']) then ... end; |
Christian S. - Mi 16.04.03 22:43
| Zitat: |
| weil ein String eben kein einfacher Typ ist sondern ein komplexer |
Besser beschrieben wäre es mit "kein aufzählbarer", komplex kann zu vieles heißen.
wulfskin - Do 17.04.03 13:26
Hallo TheD!
Hat zwar nix mit deinem Thema zu tun, aber du kannst nicht mit einer For-To-Do Schleife Items aus der Liste löschen, da, sobald ein Item gelöscht wurde, die Größe der Liste kleiner wird und du am Ende ein Fehler bekommst, da das Item X gar nicht mehr existiert.
Deshalb nimm für sowas einen While/Repeat-Schleife, bei der du I nur erhöhst, wenn das Item nicht gelöscht wurde.
Gruß wulfskin!
Christian S. - Do 17.04.03 14:13
@wulfskin: nicht ganz richtig. Du kannst Die FOR-Schleife beim höchsten Index starten lassen und bis 0 laufen lassen, dann geht das!
wulfskin - Do 17.04.03 15:49
| Peter Lustig hat folgendes geschrieben: |
| @wulfskin: nicht ganz richtig. Du kannst Die FOR-Schleife beim höchsten Index starten lassen und bis 0 laufen lassen, dann geht das! |
Stimmt ;)!
TheD - Fr 18.04.03 15:27
Oh, ja stimmt, hab da gar nciht dran gedacht. Danke für den Tip.
Frohe Ostern 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!