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

Kako da izezovem neki event?

[es] :: .NET :: .NET Desktop razvoj :: Kako da izezovem neki event?

[ Pregleda: 2671 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ADRENALIN

Član broj: 17952
Poruke: 278
*.dynamic.sbb.rs.



Profil

icon Kako da izezovem neki event?20.07.2008. u 23:06 - pre 191 meseci
Kako da pozovem event neke kontrole. Dakle ako recimo imam tekst box, i jedno dugme na formi hocu da kada kliknem dugme u obradi eventa, izazovem dupli klik nad tekst boksom, u obradi duplog klika tekst boksa treba da stoji jedan messagebox i to je sve. Primer nema nikakvog smisla, ali je tacno ono sto meni treba. Da li mogu da pozovem neki dogadjaj neke kontrole kao sto to moze u win32, cini mi se da su to ukinuli u .NET-u.
 
Odgovor na temu

bags

Član broj: 10072
Poruke: 715
*.12.15.tuwien.teleweb.at.



+2 Profil

icon Re: Kako da izezovem neki event?20.07.2008. u 23:57 - pre 191 meseci
Ako sam dobro razumeo:

Code:

textBox1.DoubleClick += new EventHandler(textBox1_DoubleClick);
button1.Click += new EventHandler(textBox1_DoubleClick);
     
private void textBox1_DoubleClick(object sender, EventArgs e)
{
     MessageBox.Show("Dvostruki klik u textboxu!");


Free advice is seldom cheap.
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.adsl-2.sezampro.yu.



Profil

icon Re: Kako da izezovem neki event?21.07.2008. u 07:45 - pre 191 meseci
Dobro, nisam bio dovoljno oprezan u postavljanju probmlema pa cu sad preformulisati. Da li je moguce pozvati event neke kontrole, ne da se dodam u red tog eventa, nego da ga izazovem. Ti si ovo sto sam ja napisao odradio tako, samo si stavio svoju obradu u red eventa i kada se on desi i tvoja obrada se izvrsi. Ali ne tako, da li je moguce da iz nekog dela koda bas izazovem event na nekoj kontroli, znaci kao sto joj windows posalje neki dogadjaj tako da i ja to izazovem. Znam kako bi to moglo u win32, mogao bih da posaljem poruku toj kontroli, ali ne znam da li je to uopste moguce u .net-u.

Hvala na brzom odgovoru :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako da izezovem neki event?21.07.2008. u 08:59 - pre 191 meseci
Nazalost, ne mozes direktno, po patternu koji koristi MS u frameworku, svi eventi su private i svi metodi koji "izazivaju" event su protected (da bi mogli da se menjaju u nasledjenim klasama). Samim tim ne postoji mogucnost da direktno iz koda pozoves taj metod koji dize event (u tvom slucaju je OnDoubleClick(EventaArgs e) koji dize DoubelClick).

U principu imas dva .net workaround-a:
1. Mozes kroz refleksiju da izazoves poziv protected metoda, mada ovo nije bas "kosher". Da bi sebi olaksao mozes da napravis extension metodu za TextBox.
2. Mozes da napravis class MojTextBox koji nasledjuje TextBox i koji ce da eksponira metod za dizanje eventa kao public, pa ga onda posle pozoves. ONda na formamama umeto TextBoxa iskoristis svoju kontrolu.

Ako hoces da se igras low-level kao kroz Win32, sve winforms kontrole imaju svoj win32 Handle koji je kao IntPtr tip deklarisan u Controls klasi, pa koristeci api interop mozes da posaljes WM_DOUBLECLICK u taj handle, deklaracija ti je:

Code:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, int lParam);


HandleRef mozes da dobijes od Handle kroz njegov konstruktor. Jedini problem sa ovim je sto je ovo unsafe code.



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako da izezovem neki event?21.07.2008. u 09:39 - pre 191 meseci
Ok, zaboravi ono gore, .NET message queue implementacija se ne moze tako lako prevariti, moras da simuliras pravi doubleclick nad textboxom sto ukljucuje slanje 4 poruke
Evo ti mali sample, kad sam vec u ordinaciji.

Code:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, int lParam);
        private const int WM_MOUSEDOWN = 0x201;
        private const int WM_MOUSEUP = 0x202;
        private const int WM_LBUTTONDBLCLK = 0x203;

        private void button1_Click(object sender, EventArgs e)
        {
            HandleRef h = new HandleRef(textBox1, textBox1.Handle);
            SendMessage(h, WM_MOUSEDOWN, 0, 0);
            SendMessage(h, WM_MOUSEUP, 0, 0);
            SendMessage(h, WM_LBUTTONDBLCLK, 0, 0);
            SendMessage(h, WM_MOUSEUP, 0, 0);
        }

        private void textBox1_DoubleClick(object sender, EventArgs e)
        {
            MessageBox.Show("Ovo je textbox doubleclick");
        }
    }


naravno, po specifikaciji WM_* poruke imaju konkretne w i l parametre, ali radi i sa 0,0. Jedina nezgodacija sa ovim je sto ce fokus ostati na textbox-u (zbog prvog WM_MOUSEDOWN)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.adsl-2.sezampro.yu.



Profil

icon Re: Kako da izezovem neki event?21.07.2008. u 10:20 - pre 191 meseci
mmix bas ti hvala, stvarno si se potrudio. Primetio sam da su sakrili te metode, ali nisam bio siguran. Videcu koji mi nacin najbvise odgovara, za sada mi se najvise svidja ovaj sa slanjem poruka, jer mi je potreban samo hendl i onda radim normalno sa svim kontrolama.
Mada mislim da cu ipak dobro razmisliti sta da iskoristim od ovoga.

Jos jednom puno hvala.
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Kako da izezovem neki event?

[ Pregleda: 2671 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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