class AnaForm: public WithAnaFormGUI<TopWindow> { Button butonlar[100]; void btnDuzenle(Button*); typedef AnaForm CLASSNAME; public: AnaForm(); }; void AnaForm::btnDuzenle(Button* btnDuzenle) { btnDuzenle->SetLabel("X"); } AnaForm::AnaForm() { CtrlLayout(*this, "Deneme"); for(int i=0;i<100;i++) { butonlar[i].LeftPosZ(i%10*30,28).TopPosZ(i/10*30,28); butonlar[i].SetLabel(String()<<i); Add(butonlar[i]); butonlar[i]<<THISBACK1(btnDuzenle, &butonlar[i]); //this works well butonlar[i]<<[](){ //How can i make it with lambda }; } }
butonlar[i]<<[&]{ btnDuzenle(&butonlar[i]); }; // this should work, since butonlar[] is a member of AnaForm class. butonlar[i]<<[=]{ btnDuzenle(&butonlar[i]); }; // this should work too. // And you can also get rid of the member function AnaForm::btnDuzenle() butonlar[i]<<[=]{ butonlar[i].SetLabel("X"); }; // this is IMO a more elegant solution in such simple cases (given your example code).
#include <CtrlLib/CtrlLib.h> using namespace Upp; class AnaForm: public TopWindow { Button butonlar[100]; void btnDuzenle(Button*); typedef AnaForm CLASSNAME; public: AnaForm(); }; void AnaForm::btnDuzenle(Button* btnDuzenle) { btnDuzenle->SetLabel("X"); } AnaForm::AnaForm() { SetRect(100,100,320,345); for(int i=0;i<100;i++) { butonlar[i].LeftPosZ(i%10*30,28).TopPosZ(i/10*30,28); butonlar[i].SetLabel(String()<<i); Add(butonlar[i]); //butonlar[i]<<THISBACK1(btnDuzenle, &butonlar[i]); Works well //butonlar[i]<<[&]{ btnDuzenle(&butonlar[i]); }; Not Works butonlar[i]<<[=]{ btnDuzenle(&butonlar[i]); }; //Works well butonlar[i]<<[=]{ butonlar[i].SetLabel("X"); };//Works well } } GUI_APP_MAIN { SetLanguage(GetSystemLNG()); AnaForm frm; frm.Run(); }
butonlar[i]<<[&]{ btnDuzenle(&butonlar[i]); }; // this should work, since butonlar[] is a member of AnaForm class.