[C++] fehler in if struktur

zerberos

Well-known member
ID: 58651
L
30 Mai 2006
75
0
Hallo,

ich habe in einer combobox items und jenachdem welches item ausgewählt wird soll in der combobox2 ein bestimmtes item ausgewählt werden

Nur der nimmt immer nur die anweisung des letzten if's...

void __fastcall TFormtest::ComboBox1Change(TObject *Sender)
{

if (ComboBox1->Text == "A1" || "A2" || "A3" || "NA" || "EA" || "NB" || "BA" || "IT" || "KP" || "RP")
{
ComboBox2->ItemIndex = 0;
}

if (ComboBox1->Text == "BP" )
{
ComboBox2->ItemIndex = 1;
}

if (ComboBox1->Text == "KA" || "RA")
{
ComboBox2->ItemIndex = 3;
}

if (ComboBox1->Text == "S1" || "S2" || "S3")
{
ComboBox2->ItemIndex = 4;
}

}
 
Kenne mich mit C++ nicht aus, aber vielleicht muss das letzte if heißen:

Code:
if (ComboBox1->Text == "S1" || ComboBox1->Text ==  "S2" || ComboBox1->Text == "S3")

Könnte sein, dass es bei "S2" und "S3" keinen Vergleich mehr benötigt.. und deshalb dieses or-Statement true ist. Aber keine Ahnung; evtl. ist die Syntax so ja auch richtig.
 
Kenne mich mit C++ nicht aus, aber vielleicht muss das letzte if heißen:

Code:
if (ComboBox1->Text == "S1" || ComboBox1->Text ==  "S2" || ComboBox1->Text == "S3")

Könnte sein, dass es bei "S2" und "S3" keinen Vergleich mehr benötigt.. und deshalb dieses or-Statement true ist. Aber keine Ahnung; evtl. ist die Syntax so ja auch richtig.

die syntax kenn ich auch nicht. ;)

muss aber nicht nur beim letzten if so gemacht werden, sondern bei allen.

am besten vorher noch in eine separate variable speichern, damit der code nicht gar so lang wird.

jperl
 
du könntest doch jedem Item die Eigenschaft "data" setzen dann könntest du eigentlich auf deinen Vergleich verzichten.

z.B.
setzt du bei Item "S1" data auf 0, und bei "RA" auf 3, kannst du beim ändern einfach hergehen und sagen hole data von "S1" und nimmst das für Combo 2.
 
Vorschlag:
Wieso benutzt du nicht die Switch funktion??

Zum Fehler:
Ich glaub du musst bei allen "ComboBox1->Text ==" davor setzen.. kenn mich aber jetzt bei c++ nit ganz so gut aus..
 
Nur der nimmt immer nur die anweisung des letzten if's...
Falsch. Er durchläuft alle ;)

Überleg doch mal, was du geschrieben hast:
Code:
[FONT=Courier New]if (ComboBox1->Text == "S1" || "S2" || "S3")[/FONT]
ist ja wenn ich das ausschreibe
Code:
[FONT=Courier New]if ((ComboBox1->Text == "S1") || ("S2" [/FONT][FONT=Courier New][COLOR=Red]!= null[/COLOR][/FONT][FONT=Courier New]) || ("S3" [/FONT][FONT=Courier New][COLOR=Red]!= null[/COLOR][/FONT][FONT=Courier New]))[/FONT]
Ein Oder-Bedingung ist dann erfüllt, wenn mindestens eine Teilbedingung erfüllt is.
"S2" ist aber sicher immer ungleich null, d.h. die Teilausdruck ist immer true und folglich ist auch der Gesamtausdruck immer true.

Analog die anderen if-Blöcke, d.h. alle werden ausgeführt.

Die richtige Syntax findest du in happymaster's Post bereits.