Moinmoin alle miteinander,
also zuerst, ich arbeite mit wxwidgets, habe aber ein Problem mit einer meiner Klassen.
In ein paar Memberfunktionen hat eine Membervariable plötzlich keinen Wert mehr.![Confused :confused: :confused:](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f615.png)
Die Klasse habe ich so definiert:
und so sieht in etwa mein Aufruf aus:
Dadurch sollte die Membervariable m_idWndi ja den Wert 2 erhalten. Das tut sie auch, denn in der Funktion CreateObjects() kann ich richtig auf sie zugreifen.
In dieser Funktion erstelle ich mehrere SpinButtons und verknüpfe sie mit den beiden Funktionen ParamSpinUp() und ParamSpinDown():
Diese beiden Funktionen sehen so aus und rufen eigentlich nur eine andere Memberfunktion (ParamSwap()) auf:
Und genau dort passiert es: Wird das Event ausgelöst, so hat die m_idWndi plötzlich in keinen dieser 3 Funktionen (ParamSpinUp(), ParamSpinDown(), ParamSwap()) einen Wert, bzw. einen nur einen Zufälligen, sehr hohen. Auf jeden Fall nicht die 2, die sie eigentlich haben sollte.
Aber was mich jetzt noch mehr verwirrt: Wenn ich jetzt die Funktion ParamSwap() aus einer andere Funktion aufrufe und nicht über die von SpinButtonEvents ausgelösten Funktionen, so funktioniert es einwandfrei
Dann hat m_idWndi in dieser Funktion plötzlich wieder den Wert 2
Ich hoffe ihr könnt mir bei meinem Problem helfen und mir sagen woran das liegt. (Wohlmöglich mal wieder irgendein Anfängerfehler^^)
MfG
MSAB
also zuerst, ich arbeite mit wxwidgets, habe aber ein Problem mit einer meiner Klassen.
In ein paar Memberfunktionen hat eine Membervariable plötzlich keinen Wert mehr.
![Confused :confused: :confused:](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f615.png)
Die Klasse habe ich so definiert:
Code:
class MDIParamEdit : public MDI
{
public:
MDIParamEdit::MDIParamEdit(wxWindowID id,const wxString& title, const wxPoint& pos, const wxSize& size, long style, int idWndi)
: MDI(id,title, pos, size, style), m_idWndi(idWndi)
{}
virtual void CreateObjects();
void ParamSwap(int a,int b);
private:
void ParamSpinUp(wxSpinEvent& event);
void ParamSpinDown(wxSpinEvent& event);
int m_idWndi;
};
und so sieht in etwa mein Aufruf aus:
Code:
MDIParamEdit *frame = new MDIParamEdit(1,"",wxPoint(0,0),wxSize(600,400),wxSYSTEM_MENU,2);
Dadurch sollte die Membervariable m_idWndi ja den Wert 2 erhalten. Das tut sie auch, denn in der Funktion CreateObjects() kann ich richtig auf sie zugreifen.
In dieser Funktion erstelle ich mehrere SpinButtons und verknüpfe sie mit den beiden Funktionen ParamSpinUp() und ParamSpinDown():
Code:
void MDIParamEdit::CreateObjects()
{
...
wxSpinButton *sb = new wxSpinButton(scrWnd,1) );
sb->Connect(1,wxEVT_SCROLL_LINEUP ,wxSpinEventHandler(MDIParamEdit::ParamSpinUp));
sb->Connect(1,wxEVT_SCROLL_LINEDOWN,wxSpinEventHandler(MDIParamEdit::ParamSpinDown));
...
}
Diese beiden Funktionen sehen so aus und rufen eigentlich nur eine andere Memberfunktion (ParamSwap()) auf:
Code:
void MDIParamEdit::ParamSpinUp(wxSpinEvent& event)
{
int id = event.GetId()-1;
ParamSwap(id,id-1);
}
void MDIParamEdit::ParamSpinDown(wxSpinEvent& event)
{
int id = event.GetId()-1;
ParamSwap(id,id+1);
}
void MDIParamEdit::ParamSwap(int a,int b)
{
wxString strBuffer = Wnds.at(m_idWndi).tcs.at(a)->GetValue();
Wnds.at(m_idWndi).tcs.at(a)->SetValue( Wnds.at(m_idWndi).tcs.at(b)->GetValue() );
Wnds.at(m_idWndi).tcs.at(b)->SetValue( strBuffer );
}
Und genau dort passiert es: Wird das Event ausgelöst, so hat die m_idWndi plötzlich in keinen dieser 3 Funktionen (ParamSpinUp(), ParamSpinDown(), ParamSwap()) einen Wert, bzw. einen nur einen Zufälligen, sehr hohen. Auf jeden Fall nicht die 2, die sie eigentlich haben sollte.
Aber was mich jetzt noch mehr verwirrt: Wenn ich jetzt die Funktion ParamSwap() aus einer andere Funktion aufrufe und nicht über die von SpinButtonEvents ausgelösten Funktionen, so funktioniert es einwandfrei
![Eek! :eek: :eek:](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f631.png)
Code:
frame->ParamSwap(2,3)
Ich hoffe ihr könnt mir bei meinem Problem helfen und mir sagen woran das liegt. (Wohlmöglich mal wieder irgendein Anfängerfehler^^)
MfG
MSAB