[wxw] button benutzen?



  • Hallöchen ich habe folgenden Code

    #include <wx/wx.h>
    #include <wx/textctrl.h>
    #include <wx/button.h>
    #include <string>
    
    class Simple : public wxFrame
    {
    public:
        Simple(const wxString& title);
    	void identifizieren(wxCommandEvent& WXUNUSED(event));
    private:
    	DECLARE_EVENT_TABLE()
    };
    
    BEGIN_EVENT_TABLE(Simple, wxFrame)
        EVT_BUTTON(1005,  Simple::identifizieren)
    END_EVENT_TABLE() 
    
    Simple::Simple(const wxString& title)
           : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 90))
    {
    	wxWindow *parent;
    	wxTextCtrl* textCtrl = new wxTextCtrl(parent, 1004,
    											wxEmptyString, wxDefaultPosition, wxSize(235, 25),
    											wxTE_PASSWORD);
    	wxButton* Button = new wxButton(parent, 1005,
    									_T("&Identifizieren"), wxPoint(0,30), wxDefaultSize);
    }
    
    void Simple::identifizieren(wxCommandEvent& WXUNUSED(event))
    {
    	std::string Passwort;
    //ZEILE 33
    	Passwort = Button->GetValue();
    	Close(true);
    }
    
    class MyApp : public wxApp
    {
      public:
        virtual bool OnInit();
    };
    
    IMPLEMENT_APP(MyApp)
    
    bool MyApp::OnInit()
    {
        Simple *simple = new Simple(_T("Identifizieren"));
        simple->Show(true);
    
        return true;
    }
    

    Das war ein Beispiel, welches ich editiert habe. Nun wollte ich, dass wenn man den "Identifizieren"-Button klickt der Inhalt der EditBox in einer Variable gespeichert wird und das Fenster geschlossen wird. Doch ich kann *Button nicht verwenden?

    1>.\main.cpp(33) : error C2065: 'Button': nichtdeklarierter Bezeichner
    1>.\main.cpp(33) : error C2227: Links von "->GetValue" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    

    Wie kann ich denn nun von der EditBox "*textCtrl" den Text in einen String speichern, wenn ich auf den Button "*Button" klicke?

    Ich verstehe noch nicht wirklich viel von wxWidgets wie man sieht, aber an diesem Fehler sitze ich schon so lange und kenne gerade keinen Ausweg mehr 😞



  • Sorry es sollte so heißen:

    void Simple::identifizieren(wxCommandEvent& WXUNUSED(event))
    {
    	std::string Passwort;
    //ZEILE 33
    	Passwort = textCtrl->GetValue();
    	Close(true);
    }
    

    Sogesehen ist auch der Fehler anders (Namen halt...)



  • Hallo,

    Das ist ganz logisch: Du deklarierst die Button-Variable im Konstruktor. Wenn der Verlassen wird, verliert auch automatisch die Variable seine Gültigkeit. Du musst also den Button als Klassenvariable deklarieren, dann gehts auch:

    class Simple : public wxFrame
    {
    public:
        Simple(const wxString& title);
        void identifizieren(wxCommandEvent& WXUNUSED(event));
    private:
        DECLARE_EVENT_TABLE()
        wxButton *Button;
    };
    
    Simple::Simple(const wxString& title)
           : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 90))
    {
        wxWindow *parent;
        wxTextCtrl* textCtrl = new wxTextCtrl(parent, 1004,
                                                wxEmptyString, wxDefaultPosition, wxSize(235, 25),
                                                wxTE_PASSWORD);
        Button = new wxButton(parent, 1005,
                                        _T("&Identifizieren"), wxPoint(0,30), wxDefaultSize);
    }
    


  • Danke 🙂
    Logisches Denken... 😃 Habe dazu noch bemerkt, dass ich es irgendwie anders in std::string umwandeln muss. Ich habe jetzt erstmal
    wxString Passwort;
    Passwort = textCtrl->GetValue();
    genommen 🙂
    Danke schön 🙂


Anmelden zum Antworten