[c++/cli]O eventach raz jeszcze...

dział ogólny

[c++/cli]O eventach raz jeszcze...

Nowy postprzez Slynx » niedziela, 24 kwietnia 2011, 15:02

Wiele razy o to pytałem, to tu to tam, ale nigdy nie dostałem jednoznacznej odpowiedzi. Jak kontroluje się wywoływane zdarzenia wewnątrz funkcji obcej klasy ?
Mam tu przykład, który właśnie zacząłem pisać.
Gdy przychodziło do tworzenia nowego okna to zawsze brałem nową klasę Windows Forms z gotowym kodem, jednak tworzenie nowej klasy dla okienka z textBoxem i 1 buttonem byłoby głupotą.

KOD cpp:     UKRYJ  
Void Funkcja()
                {
                        Form^ ask_wnd = gcnew Form();
                        Label^ lb3 = gcnew Label();
                        Button^ bt1 = gcnew Button();

                        // Form Options
                        ask_wnd->Text = "Select filter options";
                        ask_wnd->TopMost = true;
                        ask_wnd->ClientSize = System::Drawing::Size(236, 142);
                        ask_wnd->StartPosition = FormStartPosition::CenterParent;
                        //
                        // button1
                        //
                        bt1->Location = System::Drawing::Point(15, 90);
                        bt1->Name = L"button1";
                        bt1->Size = System::Drawing::Size(209, 40);
                        bt1->TabIndex = 4;
                        bt1->Text = L"OK";
                        bt1->UseVisualStyleBackColor = true;
                        bt1->Click += gcnew System::EventHandler(Funkcja, &bt1_Click); // ... tutaj;

                        System::Void bt1_Click(System::Object^  sender, System::EventArgs^  e) //... a coś takiego w funkcji w ogóle chyba nie może działać.
                        {
                              // tu jakieś zapiski do właściwości klasy, itp.,a potem Close();
                                ask_wnd->Close();
                        }

                        ask_wnd->ShowDialog();
                }
 

Jak powinien wyglądać poprawny kod dla czegoś takiego ?
Widziałem kilka kodów, ale wszystkie dotyczyły klasy głównej, a jak zdarzenia kontrolować w funkcji - ...

P.S. O ile dobrze pamiętam to już raz zadawałem takie pytanie i odpowiedzi nie dostałem, jednak wtedy nie było mi to aż tak potrzebne to odpuściłem i poszedłem naokoło, ale teraz wypadałoby to przygotować jak należy i nie zaśmiecać programu niepotrzebnymi klasami :/
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: [c++/cli]O eventach raz jeszcze...

Nowy postprzez Cyfrowy Baron » niedziela, 24 kwietnia 2011, 17:38

Jak to się robi w c++/cli to nie wiem, ale w c++ robi się to tak: ► patrz serwis: Cyfrowy Baron dział: porady -> różne -> Dołączanie zdarzeń do dynamicznie tworzonych obiektów.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [c++/cli]O eventach raz jeszcze...

Nowy postprzez Slynx » poniedziałek, 25 kwietnia 2011, 00:25

To co chcę zrobić chyba nawet nie jest możliwe. Taki układ wymagał by definiowania funkcji wewnątrz funkcji. To co pokazałeś jest przykładem zdarzeń dla dynamicznych obiektów ale deklarację funkcji wywoływanej masz na zewnątrz. Poza tym, nawet gdybym zdeklarował ją na zewnątrz to nie wewnętrzne instrukcje nie widziałyby obiektów funkcji wywołującej zdarzenie. Z kolei żeby to zadziałało musiałbym wyrzucić wszystkie powiązane ze zdarzeniami obiekty na zewnątrz, czyli uczynić je globalnymi. Wtedy wszystko by działało, ale wtedy to pisanie mija się daleko z celem.

Ostatecznie przeniosłem część obiektów do głównego okna i pozbyłem się buttona, tym samym eventu.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości