ComboBoxEx -> Menueinträge ?
-
Hallo,
ich will einfach nur wenn der 2 Menueintrag ("String[1]") ausgewählt wurde, dass mein Anweisungsblock ausgeführt wird...
mfg
-
Linnea schrieb:
[Edit]um herauszubekommen welches Item ausgewählt ist kann man ItemIndex verwenden
-
Hallo,
ja das ist genau das Problem: Das Programm lässt sich zwar probemlos kompilieren, aber dann kommt ein folgender Fehler..
Zugriffsverletzung bei Adresse "irgendwechle Zahlen" bei Modul "MeinProgramm.exe". ???
Bei folgenden if-Bedingung:
if(FormEigenschaften->ComboBoxEx->ItemIndex == 1) //usw...mfg
-
Hallo
Der Grund für die Zugriffsverletzung ist jedenfalls nicht aus dem gezeigten Quellcode ersichtlich. Dieser Fehler wird meistens verursacht wenn mit einem Pointer gearbeitet wird der aber auf eine ungültige Instanz bzw. auf gar keine zeigt. Die eigentliche Ursache liegt also woanderts. Benutzt den Debugger um Programmablauf und Variablenwerte Schritt für Schritt zu überprüfen.
bis bald
akari
-
Hallo,
könnte das Problem darin bestehen, dass ich wegen Programm spezifischen Gründen die if-Anweisung in die FormCreate geschrieben habe ??
mfg
-
Ja, das kann daran liegen. Verschieb es doch mal in die OnShow wenn möglich.
Das kannst du aber im Debugger auch schön überprüfen, indem du dort einen Breakpoint setzt und dir die Variablen mal anschaust.
-
Hallo,
warum funktioniert eigtl. folgender Code nicht ? bzw. warum ändert sich nicht die Farbe des Forms ?
void __fastcall TForm1::FormShow(TObject *Sender) { if(FormEigenschaften->ComboBox->ItemIndex == 0) Form1->Color = clBlue; else if(FormEigenschaften->ComboBox->ItemIndex == 1) Form1->Color = clRed; }mfg
-
welchen Wert hat der ItemIndex denn beim Ereignis FormShow? benutz doch mal den Debugger
falls du erreichen willst, dass beim Ändern des ComboBox-Eintrags die Farbe des Forms geändert wird, ist das FormShow-Ereignis eindeutig die falsche Methode...
-
Hallo,
nein ich will erreichen, dass wenn der Benutzer eine Farbe auswählt (in der ComoboBox), das Programm(Form) bei jedem (Neu)Start diese Farbe annimmt.
mfg
-
und was sagt denn nun der Debugger beim ItemIndex? bzw. wo/wie weist du den ItemIndex zu bevor FormShow aufgerufen wird?
-
Also ich hab als Standard ItemIndex = 0:
Nun möchte ich wenn der Benutzer Item nur 2 auswählt (ItemIndex 1) sich die Farbe bei jedem Neustart dementsprechend ändert.void __fastcall TForm1::FormShow(TObject *Sender) { if(FormEigenschaften->SGebiet_Box->ItemIndex == 1) Form1->Color = clBlue; }PS: Der Debugger sagt nichts... Das ist ja das dumme
-
irgendwie ist mir dein Problem völlig unklar
a) startest du das Programm und läßt dann immer als erstes das Formular mit der Auswahl anzeigen, so dass der Nutzer jedesmal eine Farbe auswählen kann? oder
b) änderst du die Farbeinstellung nur einmal irgendwann und erwartest, dass die ComboBox sich intern den eingestellten Wert merkt?wenn b): so funktioniert das nicht. Damit sich die Farbe bei jedem Neustart des Programms ändert mußt du den ausgewählten Wert irgendwo speichern und beim Programmstart wieder auslesen, da die ComboBox ja immer mit dem eingestellten Index 0 beginnt
hierfür bieten sich INI-Files an
-
Hallo,
ja eher das zweitere (b). Ich versteh das mit diesen "INI's" nicht, kann man das nicht irgendwie "einfacher" lösen ??
mfg
-
du hast mehrere Möglichkeiten Variablenwerte für den Programmneustart zu speichern:
- INI-Files (siehe Link und BCB-Hilfe)
- einfache Text-Datei, z.B. über TStringList (siehe FAQ und BCB-Hilfe)
- Registry (siehe BCB-Hilfe, allerdings sollte man hier wirklich wissen was man tut und einige Nutzer sehen es nicht gern wenn man auf ihrem Rechner in der Registry rumschreibt ...)prinzipiell mußt du solche Sachen aber irgendwo speichern, da beim Programmende alle internen Variablen verloren gehen und somit irgendwelche Einstellungen immer wieder mit dem Initialiserungswert beginnen
-
Zur Registry gibt es im Tutorial auch einen Link.