Probleme beim Auswerten von Textboxen



  • Mahlzeit,

    mal gleich vorab, ich bin neu hier und stecke z.Z. noch in der Ausbildung.

    Ich soll z.Z. ein Programm schreiben, welches ein paar Rechenaufgaben für mich druchführt.

    In Form einer Konsole war das auch gar kein Problem.

    Nun wurde ich aber gebeten, das ganze mit einer Grafischen Oberfläche umzusetzten...

    Ich habe also mit Visual Studio ein CLR Projekt erstellt und ein mit Windows Form mir eine Grafische Oberfläche zusammengebastellt.

    Jetzt zu meinem Problem, ich möchte gerne die Werte ein Textfeld eingeben und diese dann in mein Array in der CPP schreiben, damit ich diese dort auswerten kann.

    Folgendes habe ich breites zu stande gebracht:

    ServerGUI.cpp

    #include "ServerGUI.h"
    #include <string>

    using namespace System;

    std::string Test(String ^ s) {
    std::string os;
    using namespace Runtime::InteropServices;
    const char* chars =
    (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
    os = chars;
    Marshal::FreeHGlobal(IntPtr((void*)chars));
    return os;
    }

    und in meiner Header das folgende:

    ServerGUI.h

    #pragma once

    namespace Wartungsvertragsrechner071 {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    /// <summary>
    /// Zusammenfassung für MyForm
    /// </summary>

    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
    MyForm(void)
    {
    InitializeComponent();
    //
    //TODO: Konstruktorcode hier hinzufügen.
    //
    }

    protected:
    /// <summary>
    /// Verwendete Ressourcen bereinigen.
    /// </summary>
    ~MyForm()
    {
    if (components)
    {
    delete components;
    }
    }
    public: System::Windows::Forms::TextBox^ EingabeBox;
    protected:
    public: System::Windows::Forms::Button^ ButtonWrite;

    protected:

    private:
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    System::ComponentModel::Container ^components;

    #pragma region Windows Form Designer generated code
    /// <summary>
    /// Erforderliche Methode für die Designerunterstützung.
    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    /// </summary>
    void InitializeComponent(void)
    {
    this->EingabeBox = (gcnew System::Windows::Forms::TextBox());
    this->ButtonWrite = (gcnew System::Windows::Forms::Button());
    this->SuspendLayout();
    //
    // EingabeBox
    //
    this->EingabeBox->Location = System::Drawing::Point(91, 57);
    this->EingabeBox->Name = L"EingabeBox";
    this->EingabeBox->Size = System::Drawing::Size(100, 20);
    this->EingabeBox->TabIndex = 0;
    //
    // ButtonWrite
    //
    this->ButtonWrite->Location = System::Drawing::Point(114, 163);
    this->ButtonWrite->Name = L"ButtonWrite";
    this->ButtonWrite->Size = System::Drawing::Size(75, 23);
    this->ButtonWrite->TabIndex = 1;
    this->ButtonWrite->Text = L"Weiter";
    this->ButtonWrite->UseVisualStyleBackColor = true;
    this->ButtonWrite->Click += gcnew System::EventHandler(this, &MyForm::ButtonWrite_Click);
    //
    // MyForm
    //
    this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    this->ClientSize = System::Drawing::Size(284, 262);
    this->Controls->Add(this->ButtonWrite);
    this->Controls->Add(this->EingabeBox);
    this->Name = L"MyForm";
    this->Text = L"MyForm";
    this->ResumeLayout(false);
    this->PerformLayout();

    }
    #pragma endregion
    private: System::Void ButtonWrite_Click(System::Object^ sender, System::EventArgs^ e) {

    std::string Test(EingabeBox->Text);
    }

    };
    }

    Ich hoffe der Schittstorm wird nicht zu groß 😮 und bin für jede Hilfe dankbar.
    Danke im Voraus.



  • Doch, s. den mit "Wichtig" markierten Beitrag Windows Forms und Visual C++ MACHT KEINEN SINN!



  • Warum hantierst Du mit std::string und System::String herum? Bleib bei den .NET Typen (= System::String ). Und es würde (Dir) helfen, wenn Du eine konkrete Frage hättest.

    Ansonsten hilft auch der Kommentar von Th69 weiter. 🕶



  • Danke erstmal für die schnelle Antwort.
    Da ich das Programm bereits als std fertig habe und keine lust habe es neu zu schreiben, würde ich gerne nur eine Grafische Oberfläche schaffen in der ich meine Werte eintragen kann und diese in mein bestehendes Arry übergebe.

    Als beispiel ein Teil des alten Programms:

    #include <iostream>
    #include <iomanip>
    #include <string>

    using namespace std;

    //Strukturen
    struct Kunde {
    int iKundennr;
    string sName;
    string sNameAnsprechpartner1;
    string sTelefonAnsprechpartner1;
    string sEMailAnspreachpartner1;
    string sNameAnsprechpartner2;
    string sTelefonAnsprechpartner2;
    string sEMailAnspreachpartner2;
    };

    //Funktionen
    int iFunktionKunde();

    //Arrays
    struct Kunde aKunde[1];

    //Aufnahme Kundendaten
    int iFunktionKunde() {
    cout << "Bitte geben Sie die folgenden Kundeninformationen ein:" << endl;
    cout << "======================================================" << endl;
    cout << "Kundeninformationen:" << endl;
    cout << "------------------------------------------------------" << endl;
    cout << "1. Kundennr : ";
    cin >> aKunde[0].iKundennr;
    cout << "2. Firmenname: ";
    cin >> aKunde[0].sName;
    cout << endl;
    cout << "3. Name erster Ansprechpartner: ";
    cin >> aKunde[0].sNameAnsprechpartner1;
    cout << "4. Telefonnummer erster Ansprechpartner: ";
    cin >> aKunde[0].sTelefonAnsprechpartner1;
    cout << "5. E-Mail erster Ansprechpartner: ";
    cin >> aKunde[0].sEMailAnspreachpartner1;
    cout << endl;
    cout << "6. Name zweiter Ansprechpartner: ";
    cin >> aKunde[0].sNameAnsprechpartner2;
    cout << "7. Telefonnummer zweiter Ansprechpartner: ";
    cin >> aKunde[0].sTelefonAnsprechpartner2;
    cout << "8. E-Mail zweiter Ansprechpartner: ";
    cin >> aKunde[0].sEMailAnspreachpartner2;
    cout << endl;

    return 1;
    };

    Wie kann ich hier aus dem vorangegangeng teil des Headers per Klick auf weiter
    die eingegebenen Informationen aus der Textbox z.B. in aKunde[0].sKundenname schreiben.



  • Dazu muss das Array aKunde der Instanz von MyForm bekannt sein. Das kann man machen, indem man das Array beim Erzeugen (oder später) des MyForm -Objektes übergibt. Alternative und vielleicht am einfachsten ist es, das Array aKunde direkt als Member der Klasse MyForm zu machen.



  • Danke für die Info theta.
    Hast du dafür für mich vielleicht einmal ein Beispiel ?

    Danke im Voraus.