Inhalt aus ComboBox in eine Variable kopieren?!



  • Hallo

    Habe gerade angefangen, window forms mit Visual C++ 2005 Express Edition zu programmieren.
    Bin also komplett neu auf dem Gebiet 🙄

    Habe jetzt das Problem, dass ich den Inhalt, den ich in der ComboBox habe nicht in einer Variablen speichern kann um damit später Vergleiche für den weiteren Programmablauf zu machen.

    Habe schonmal probiert den Inhalt in ein label zu schreiben, was ja folgendermaßen geht:
    this->label2->Text=this->comboBox1->Text;

    Das klappt, aber wie bekomm ich den Inhalt in eine Variable



  • Da es sich bei dem Property Text um einen String handelt, kannst du den Wert eben in einer entsprechenden Variable speichern.



  • R1Alex schrieb:

    Hallo

    Habe gerade angefangen, window forms mit Visual C++ 2005 Express Edition zu programmieren.
    Bin also komplett neu auf dem Gebiet 🙄

    Habe jetzt das Problem, dass ich den Inhalt, den ich in der ComboBox habe nicht in einer Variablen speichern kann

    Es währe schön einige deiner Versuche zu sehen (Quelltext) um dir dann weiter zu helfen.

    R1Alex schrieb:

    um damit später Vergleiche für den weiteren Programmablauf zu machen.

    Ich weiß nicht ob das "unsauber" ist aber du musst nicht den Wert in eine Variable speichern um die Vergleichen zu können. (zumindest nicht Manuel).

    Folgende möglichkeiten hast du die "Variablen"/Werte zu vergleichen.

    Du weißt den Wert der Property in eine Variable und dann vergleichen geht so:

    String ^text; //Erzeugen einer String-Variable, die den Selben Typ hat wie Text der comboBox
    
    text = this->comboBox1->Text; //Kopiert den Inhalt von Text in die Variable
    
    if(text == "OK") //Vergleich
        anweisung...
    

    oder du vergleichst den Wert der Property sofort und das geht so:

    if(this->comboBox1->Text == "OK") //Vergleich ohne den Wert extra zuweisen zu müssen
        anweisungen...
    

    Bei der zweiten variante braucht man keine Zusätzliche Variable. Ich geben zu die Anweisungen können so auch mal ganz lang werden.

    Bei generellen Zuweisungen musst du nur darauf achten das der Typ gleich ist, sonst können die verschiedensten Sachen dabei rauskommen 😉

    Gruß
    Rudi G



  • Erst mal danke für die schnelle Antwort.

    Ich will den Inhalt der ComboBox in einer Variable abspeichern, da ich in der ComboBox dem Anwender mehrere Möglichkeiten zur Auswahl geben möchte (z.B. Möglichkeit1, Möglichkeit2, Möglichkeit3).
    Je nachdem was er ausgewählt hat, werde ich durch Vergleiche andere Wege im Programm gehen müssen, d.h. das weitere Programm wird je nach Auswahl mit unterschiedlichen Informationen "gefüttert" und weiter laufen.

    Demnach müsste ich die Variable mit dem Inhalt der ComboBox an mein "main-Programm" übergeben und dort weiterverarbeiten.
    Wenn ich den Wert so wie du es beschrieben hast in die Variable schreiben kann, muss ich diese ja nur noch mit "return text" an mein "main-porgramm" übergeben, oder?! 😕

    Hab im Moment leider nicht den Code vor mir, da ich den an der Arbeit aufm PC habe.



  • R1Alex schrieb:

    Erst mal danke für die schnelle Antwort.

    Ich will den Inhalt der ComboBox in einer Variable abspeichern, da ich in der ComboBox dem Anwender mehrere Möglichkeiten zur Auswahl geben möchte (z.B. Möglichkeit1, Möglichkeit2, Möglichkeit3).
    Je nachdem was er ausgewählt hat, werde ich durch Vergleiche andere Wege im Programm gehen müssen, d.h. das weitere Programm wird je nach Auswahl mit unterschiedlichen Informationen "gefüttert" und weiter laufen.

    Das ist mir soweit auch verständlich, also ich würde es nicht über die Property "Text" von comboBox machen sonden mit SelectedItem.

    Die Anweisung würde dann ungefähr so aussehen.

    String ^variable;
    
    variable = this->comboBox1->SelectedItem->ToString();
    

    R1Alex schrieb:

    Demnach müsste ich die Variable mit dem Inhalt der ComboBox an mein "main-Programm" übergeben und dort weiterverarbeiten.
    Wenn ich den Wert so wie du es beschrieben hast in die Variable schreiben kann, muss ich diese ja nur noch mit "return text" an mein "main-porgramm" übergeben, oder?! 😕

    Wow du solltest mal ganz ruhig anfangen.

    Wenn du mit den Windows-Forms Programmierst dann wird so ziemlich alles, bis auf paar Ausnahmen, in den einzelnen .h - Header Dateien programmiert die zu den Formularen gehören. Das sind keine "Ablaufprogramme" für die DOS-Console die einfach von der 1. Zeile Quellcode bis zur letzten Zeile durchrast.

    Hier wird nach verschiedenen Ereignissen programmiert. z.B. nach dem Ereignis OnClick() (was passiert wenn der Benutzer die Schaltfläche anklickt etc.). Natürlich muss/kann man auch hier verschiedene Abläufe für verschieden Auswahlen Programmieren aber hier passiert das meiste -oder auch fasst alles- in den .h (Header) Dateien.

    Ich empfehle dir, dich mit der OOP (objektorientierte Programmierung) auseinander zu setzten. Denn es ist nicht so ganz einfach auf Variablen/Attribute einer Klasse zuzugreifen.

    Ich habe es auch nie kapiert was das noch mit der "modernen" Programmierung in der man schon fast alles einfach mit der Maus drauf ziehen kann, zu tuen hat. Bis ich es mir mal rein gezogen habe. Jetzt verstehe ich auch (wenn noch nicht soooo gut) was mit Methoden/Klassen und den Einzelnen Ereignissen zu tuen hat.

    R1Alex schrieb:

    Hab im Moment leider nicht den Code vor mir, da ich den an der Arbeit aufm PC habe.

    Dann kannst du es ja bei Bedarf noch nachholen

    Gruß
    Rudi G



  • So also hier ein Teil meines Codes.
    Habe es jetzt so gemacht, wie du es mir geschrieben hast. Funktioniert super!

    #############################################################################
    if(this->comboBox1->SelectedItem == "OPEL")
    this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(2) {L"OPEL STD1", L"OPEL STD2"});

    else if(this->comboBox1->SelectedItem == "VW")
    this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(2) {L"VW STD1", L"VW STD2"});

    #############################################################################

    Damit schreibe ich jenachdem was in ComboBox1 angewählt wird, in ComboBox2 die nächste Auswahlmöglichkeiten.

    Mein jetziges Problem ist nur, wenn ich erst "VW" und dann "OPEL" anwähle, steht "VW STD" und "OPEL STD" in der zweiten ComboBox.
    Habe das Löschen der ComboBox versucht wie es in der MFC Library Reference steht mit:

    // The pointer to my combo box.
    extern comboBox1* pmyComboBox;

    // Delete all the items from the combo box.
    pmyComboBox->ResetContent();

    oder mit

    comboBox1->Items->Clear

    Geht aber leider beides nicht 😞

    Wie ich das weitere Übergeben meiner Variablen mache, gucke ich mir wie du schon sagst nochmal an. Ich muss nämlich die Ergebnisse der ersten "Form" zu einer zweiten "Form" übergeben und da mit den Ergebnissen weiter arbeiten.



  • R1Alex schrieb:

    Mein jetziges Problem ist nur, wenn ich erst "VW" und dann "OPEL" anwähle, steht "VW STD" und "OPEL STD" in der zweiten ComboBox.
    Habe das Löschen der ComboBox versucht wie es in der MFC Library Reference steht mit:

    oder mit

    comboBox1->Items->Clear

    Geht aber leider beides nicht 😞

    Hast du hinter Clear- die Klammern gesetzt?

    Der Aufruf müsste soaussehen:

    comboBox1->Items->Clear();
    

    Wenn du möchtest das da nur der Ausgewälte-Wert steht dann lösch doch bevor du den setzt den Inhalt mit Clear().

    z. B. so:

    if(this->comboBox1->SelectedItem == "OPEL"){ 
        this->comboBox2->Items->Clear(); //Damit leere ich die ComboBox, das heißt der "alte" Wert wird gelöscht
        this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(2) {L"OPEL STD1", L"OPEL STD2"});   
    }
    else if(this->comboBox1->SelectedItem == "VW") {
        this->comboBox2->Items->Clear(); //und hier genauso
        this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(2) {L"VW STD1", L"VW STD2"});
    }
    

    R1Alex schrieb:

    Wie ich das weitere Übergeben meiner Variablen mache, gucke ich mir wie du schon sagst nochmal an. Ich muss nämlich die Ergebnisse der ersten "Form" zu einer zweiten "Form" übergeben und da mit den Ergebnissen weiter arbeiten.

    Dafür musst du eigene Methoden schreiben die öffentlich sind und die Werte von dem anderem Formular zurückgeben aber das erfährst du ja bei der OOP.

    Gruß
    Rudi G


Anmelden zum Antworten