Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Posrednik za dogadjaje...?

[es] :: .NET :: Posrednik za dogadjaje...?

[ Pregleda: 2962 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Posrednik za dogadjaje...?25.10.2006. u 15:19 - pre 212 meseci
Napravio sam neku komponentu, tj. nasledio sam je iz TextBoxa, instance te klase dinamicki pravim i lepim ih na neki panel, pa dalje taj panel lepim na neku user kontrolu...da ne duzim, uglavnom ne znam koliko imam parenta dok ne dodjem do korene klase mog UI-a. Imam nekoliko kontejnera, a treba "prvi" kontejner da obavestim da se u text boxu desio neki dogadjaj, koji ce handlovati taj dogadjaj. Posto ne mogu jednostavno staviti parent.nekiEventHandler iz vec navedenih razloga, kako ovo odraditi? Verovatno mi treba neki objekat(klasa) posrednik, ali kako?
Hvala, pozdrav.
RTFM
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 16:00 - pre 212 meseci
Iskreno ne razumem bas najbolje sta ti je problem ovde. Sve si napisao i sta je problem i kako da ga resis, sad ostaje samo jos da se utvrdi sta je pitanje
Da li je tebi problem da nadjes prvog parenta?
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 16:41 - pre 212 meseci
Nije mi problem u prvom parentu, nego imam ih ko zna koliko, negde 1-2 negde 3-4 sve zavisi, dok dodjem do osnovne klase u kojoj obradjujem dogadjaje koji su se desili u tom text boxu. Znaci imam jednu UserControlu i u okviru nje mi je public metod koji mi obradjuje dogadjaje svih textboxova. E sad ja na tu User kontrolu stavljam panel i text boxove, moze da se desi da ih ima i vise (panela), ponekad moze da se desi da na taj panel stavljam jos i Tab Control pa u okviru tab page-a da imam opet panel na koji lepim text boxove. Problem mi je kako da dodjem do tog mog metoda za obradu dogadjaja koji je u onom user control-u, bez npr. ((this.parent).parent).parent....mojEventHandler() ili ovako necega... Nadam se da sam bio jasniji. Ja kontam da mi treba neki objekat tj klasa koja ce nekako da "slusa" dogadjaje i koja ce da pozove metod u onom User Controlu, ali ne znam kako sve to da ukomponujem :)
RTFM
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 18:40 - pre 212 meseci
Ne znam da li sam dobro razumeo ali evo kako ja vidim tvoj problem.

Imas user control-u koja je parent svim onim ostalim panelima, tabovima, i texboxovima, naravno hierarhijski. Sta tebi treba je da nadjes, odnosno pozoves neku metodu koja ti se nalazi u public deklaraciji UC.

Recimo imas nesto ovako
Code:

[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))] 
    public partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.ContainerControl, true);            
        }

        public void SomeMethod()
        {
            MessageBox.Show("Hello!");
        }
    }


i textbox

Code:

public class MyTextBox : TextBox
    {

        public void InvokeSomeMethod()
        {
            MyUserControl uc = GetParent(this);
            if (uc != null)
                uc.SomeMethod();
        }

        public MyUserControl GetParent(Control c)
        {
            if (c.Parent != null)
            {
                if (c.Parent is MyUserControl)
                    return (MyUserControl)c.Parent;
                else
                {
                    MyUserControl uc = GetParent(c.Parent);
                    if (uc != null)
                        return uc;
                }    
            }
            
            return null;
        }
    }


Posle u textboxu pozivas sa
Code:

myTextBox1.InvokeSomeMethod();


E sad necu da ulazim zasto sve ovo radis sto radis, ali meni ipak toliki broj controla koje lepis unutar UC ne zvuci bas najbolje.
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl.



Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 19:05 - pre 212 meseci
Stvari stoje ovako; Ako si vec nasledio kontrolu onda si nasledio i dogadjaje. Sto znaci da moras da deklarises klasu sa dogadjajima (withevents) kada je pozivas.

Drugi nivo dinamickog kreiranja controla se odnosi na dodavanje handlera tipa: add handler - addressof.

Za pravljenje vlastitih dogadjaja se koriste DELEGATI koji zahtevaju malo rada da bi se shvatili, ali u principu rade kao (safe type) function pointers.

Bez dubljeg ulazenja u tvoj problem, ja mislim da vec na prvom nivou mozes sve resiti, zato sto ce se dodadjaj pojaviti pa makar ga imao unutar 100 kontrola ili klasa tj. zasto bi ti ekstra obavestavao krajnjeg parenta da se neki dogadjaj desio kad on vec ima tu informaciju?

[Ovu poruku je menjao Vuko_ dana 25.10.2006. u 20:17 GMT+1]

[Ovu poruku je menjao Vuko_ dana 25.10.2006. u 20:38 GMT+1]
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 21:06 - pre 212 meseci
Hvala vam na odgovorima!

@negyxo
Ovako nesto sam i sam razmisljao sa rekurzijom, ali ne znam da li ce mi mozda biti sporo i previse zahtevno... probacu pa ako radi, ostavicu ovako. Mislio sam nekako drugacije da resim ovo ali ipak ce ovako biti najjednostavnije. Hvala ti svakako.

@Vuko_
Ok je, kontam ja to sto kazes za nasledjivanje, znam sta su delegati i pokazivaci na funkcije, ovo sa add handler nisam nikada video ni koristio...
Citat:
Bez dubljeg ulazenja u tvoj problem, ja mislim da vec na prvom nivou mozes sve resiti, zato sto ce se dodadjaj pojaviti pa makar ga imao unutar 100 kontrola ili klasa tj. zasto bi ti ekstra obavestavao krajnjeg parenta da se neki dogadjaj desio kad on vec ima tu informaciju?

Znam da se poruke prosledjuju u "prozorima" od glavnog pa prema dole u hijerarhiji, barem je tako bilo u Borlandovom VCL-u i nekim drugim GUI framework-ovima, ne vidim zasto to ne bi tako radilo i u .NET-u, ali ne znam kako da "uhvatim" poruku koja meni treba gore u hijerarhiji...
Najjednostavnije ce biti ovako kako kaze negyxo.
Hvala vam ljudi na pomoci!

RTFM
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl.



Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 23:47 - pre 212 meseci
Ja imam osecaj da to tebi jos nije jasno :)

Negyxo ti je lepo rekao da postoji samo jedan parent, a tvom slucaju (predpostavljam) to je neki glavni form.

Dakle, ako ti se neki dogadjaj desi u tekst boksu, jednostavno mozes da posaljes porku glavnoj formu kroz me.nekiproperty = nekiproperty preko zeljenog dogadjaja tekst boksa, a tako i da pokrenes neki postojeci dogadjaj glavnog parenta. Ovde sad ako zelis posebne dogadjaje moras da koristis delegate koje mozes da pokrenes preko promena "vlastio-napravljenih" properties.

Sa druge strane ako stavis u formu jedan panel sa imenom "Panel1" i u taj panel opet jos jedan panel sa imenom "Panel2", da bi adresirao panel2 neces koristiti me.panel1.panel2, nego direktno me.panel2. Dakle, tako mozes i da saljes "poruke" children bez obzira na njihovu hijerarhiju.
Alternativno mozes da koristis:

Code:

'sorry nije c# nego basic

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim c As Control

        For Each c In Me.Controls

            If c.Name = "Panel2" Then

                c.nekiproperty = newnekiproperty

            End If

        Next

End Sub



Eto, a meni jos nije jasno kako ti ne mozes "glavnom" parentu poslati dogadjaj :)
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Posrednik za dogadjaje...?25.10.2006. u 23:57 - pre 212 meseci
Citat:

Ovako nesto sam i sam razmisljao sa rekurzijom, ali ne znam da li ce mi mozda biti sporo i previse zahtevno... probacu pa ako radi, ostavicu ovako. Mislio sam nekako drugacije da resim ovo ali ipak ce ovako biti najjednostavnije. Hvala ti svakako.

Umesto rekuzivne funkcije mozes i preko for ili while. Probaj sta ti je brze, po nekoj logici for i while bi trebalo da su brzi od rekuzivnog pozivanja.

Citat:

Ok je, kontam ja to sto kazes za nasledjivanje, znam sta su delegati i pokazivaci na funkcije, ovo sa add handler nisam nikada video ni koristio...

To sto vuka prica je za VB, u C# nema addressof i withevents, doduse nije mi ni jasno zasto su stavili i u VB-u.

Citat:

Znam da se poruke prosledjuju u "prozorima" od glavnog pa prema dole u hijerarhiji, barem je tako bilo u Borlandovom VCL-u i nekim drugim GUI framework-ovima, ne vidim zasto to ne bi tako radilo i u .NET-u, ali ne znam kako da "uhvatim" poruku koja meni treba gore u hijerarhiji...


Tako se svuda salju poruke. To je vise odlika windowsa nego nekog framework-a/biblioteke. Ostali samo wrapuju taj mehanizam kojim se prosledjuju poruke. Ali raditi to sa kontrolama u .NET nije nimalo trivijalan posao. Ustvari ja i ne znam kako bi to izgledalo. Pogotovo sto razlicite kontrole mogu da salju njima specificne poruke za koje parent uopste ne zna. Tako da treba ostati u okviru .NET-a a to bakcanje sa win32 funkcijama ima mozda smisla u nekim zahtevnijm aplikacijama. Jedino gde sam video da se message loop handluje u nekoj .NET aplikaciju je u igrama pod Managed DirectX-om.

 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl.



Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 00:20 - pre 212 meseci
A kako vi onda u C# dodajete eventhandler za dinamicki (runtime) naprevljenu kontrolu?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.donet.co.yu.



+311 Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 00:24 - pre 212 meseci
U čemu je problem? Napiši event handler metodu na glavnoj UserControl-i na kojoj hoćeš da obrađuješ događaj kontrola.
Sad kad dinamički kreiraš kontrole svakoj toj kreiranoj kontorli dodeli event handler na instancu glavne UserControl-e.

Pozdrav!
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl.



Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 00:56 - pre 212 meseci
Ma, nema problema :) (sta se ljutis odmah)

Zbunio me negyxo sa tim da to addhandler nema u C#, pa sam se upitao kako se to onda u C# radi, ali vidim da je princip isti.

U vb to ide ovako:

Code:


         Dim b As New Button                                                         'dimenzionise b kao novi button

        AddHandler b.Click, AddressOf bcl                                         'odredjuje da se sub bcl izvrsava na click za b

  
    Private Sub bcl(ByVal sender As Object, ByVal e As EventArgs)      'sub bcl 
        'ovde ide kod za klik za b
    End Sub




 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 12:34 - pre 212 meseci
Izgleda da me ovde jedino negyxo razume :).


@Vuko_
kod u C#
this.button1.Click += new System.EventHandler(this.button1_Click);

@negyxo
Uradicu preko rekurzije, pa sta mi bog da. Mozda i petlju probam zbog brzine, mada je rekurzija elegantnija. Nemam ni volje ni vremena da se zezam sa porukama na nekom nizem nivou, valda ce i ovako biti dovoljno brzo.

@dusans
Nije meni problem dinamicko kreiranje i sam dogadjaj, vec mi je problem hijerarhijski da nadjem parenta koji mi treba, a jedini nacin da dodjem do njega je da se vracam u hijerarhiji do parenta koji meni treba, ne mogu direktno da pristupim instanci koja mi treba.

Negyxo-ovo resenje mi resava problem.

Hvala ljudi na pomoci jos jednom!
Pozdrav!



RTFM
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl.



Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 17:11 - pre 212 meseci
Pa hajde onda nam javi kako si to resio rekurzijom. Ja kao da pricam spanski. Kako ces da resis rekurzijom nesto sto ne moze tako da se resi.

Kako mislis da resis rekurzijom 100 panela koji su svi unutar jednog drugog ako ti parent form(control) svakog od njih vidi ne kao hijerahijsku strukturu nego kao zasebnu kontrolu. Rekao sam ti lepo, stavi panel i stavi jos jedan panel u njega, neces adresirati panel 2 kao me.panel1.panel2 nego direktno me.panel2. Kako to onda mislis da resis rekurzijom?
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.neobee.net.



+41 Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 17:40 - pre 212 meseci
Moje misljenje je da ne bi trebalo da tvoja osnovna kontrola bilo sta ispituje u dubini po parentima, trebalo bi stvar da okrenes - onako kako ti je @Vuko_ objasnio. To je ispravan objektni pristup, a ovo tvoje vodi u propast. Tvoja user kontrola ne bi trebala da ispituje okruzenje (ni da ga vidi), vec da radi sta joj "visa" kontrola kaze, preko metoda koje izlaze okruzenju. Dakle: nizom kontrolom upravlja visa kontrola - folozofski receno.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 19:11 - pre 212 meseci
Malo se kasno uključujem...

@popov: Ti dinamički kreiraš te nazovi tekstboksove. Šta je problem da im, nakon što ih kreiraš, navežeš (još) jedan onchange (ili koji već ti treba) event handler koji će se nalaziti u glavnoj formi? Kao što ti ljudi govore, nema potrebe da "nalaziš" parenta: ako parent kreira te kontrole, neka im pri kreiranju doda svoj handler na event.
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Posrednik za dogadjaje...?26.10.2006. u 20:05 - pre 212 meseci
@jablan
Txt boxove mi generise posebna klasa, ali dao si mi dobru ideju, ako prepravim program mogu da uradim kao sto si rekao!
Jbg. covek ponekad ne vidi sumu od drveta!
Thx!
RTFM
 
Odgovor na temu

[es] :: .NET :: Posrednik za dogadjaje...?

[ Pregleda: 2962 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.