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

Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"

[es] :: .NET :: .NET Desktop razvoj :: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"

[ Pregleda: 3538 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.adsl.net.t-com.hr.



Profil

icon Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 11:25 - pre 192 meseci
Imam nekolio tredova ,jedan od njih trebao bih brojati klikove , bez obzira na kojoj se formi dogodio. (Do sada sam imao brojac u SVAKOJ formi i prilikom klika bi ga povecao to mi se cini traljavo rijesenje )
Da li postoji neko bolje rijesenje. Aplikacija je u C# ,ne web .HVALA
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
79.101.215.*

Jabber: DarkMan


Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 12:01 - pre 192 meseci
Ja bi ti preporucio da za brojanje koristis jedno mesto tj. jednu istu klasu. Nju mozes realizovati preko static promenljivih/metoda ili preko Singleton sablona.

Code:

    public class StaticExample
    {
        private static int _counter = 0;
        public static int Counter
        {
            get { return _counter; }
            set { _counter = value; }
        }
    }


Code:

    public class SingletonExample
    {
        private static SingletonExample _instance = new SingletonExample();

        public static SingletonExample Instance
        {
            get { return _instance; }
        }

        private SingletonExample()
        {
        }

        private int _counter = 0;
        public int Counter
        {
            get { return _counter; }
            set { _counter = value; }
        }
    }


A ovako ih koristis:
Code:

SingletonExample.Instance.Counter++;
StaticExample.Counter++;
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 12:17 - pre 192 meseci
Citat:

Nju mozes realizovati preko static promenljivih/metoda ili preko Singleton sablona.

Static promenljive nisu thread-safe ...
a pomenuti Singleton sablon ni on nije thread-safe posto nema thread-lock-ova nad objektom.
Code:

public class Singleton
{

     static Singleton instance = null;
     static readonly object padlock = new object();

     Singleton()
     {
     }

     public static Singleton Instance
     {
         get
          {
             lock (padlock) // lock varijable sa exclusive pristup za pojedinacni thread 
              {
                  if (instance == null)
                  {
                       instance = new Singleton();
                  }
                    return instance;
                }
           }
     }
      
}

Viva lollapalooza
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 12:27 - pre 192 meseci
Nek ti svaka forma nasleđuje tvoju osnovnu klasu za forme koja će brojati klikove.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 13:36 - pre 192 meseci
Cini mi se da resenje sa brojanjem klikova i nije bas najsigurnije ...
Thread mora svaki put (u nekom vremenskom intervalu)
da proverava taj brojac tj. counter u formi i na osnovu njega da detektuje klik
sto moze dovesti dovesti da ga ne detektuje u pravom trenutku (sve zavisi od intervala)

Jedino sto mi sada pada napamet je koriscenje P/Invoke funkcija iz WIN32 API -ija

Code:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;

    public POINT(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}
[StructLayout(LayoutKind.Sequential)]
public struct MSG
{
    public IntPtr hwnd;
    public UInt32 message;
    public IntPtr wParam;
    public IntPtr lParam;
    public UInt32 time;
    public POINT pt;
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PeekMessage(out MSG lpMsg, HandleRef hWnd, uint wMsgFilterMin,
   uint wMsgFilterMax, uint wRemoveMsg);


[DllImport("user32.dll")]
static extern bool PostThreadMessage(uint idThread, uint Msg, UIntPtr wParam,
   IntPtr lParam);


// u tvom Button Click handler-u : 
const int BUTTON_CLICK = 2000 ; //poruka koju saljes tvom thread-u 
// ID treada kome hoces da saljes poruku 
int nIDthread  = thread.ManagedThreadId ; 
PostThreadMessage(nIDThread,BUTTON_CLICK,IntPtr.Zero,IntPtr.Zero) ; 

// u tvojoj Thread proceduri : 
MSG msg ; 
bool foundMessage = PeekMessage(out msg, IntPtr.Zero, 0, 0, 0); // da li imamo poruku u thread-u 
if (foundMessage) // imamo poruku u thread-u 
{
 if (msg.message == BUTTON_CLICK) // proveravamo o kojoj se poruci radi ... 
 {
     MessageBox.Show("kliknuto dugme na formi") ;  

 }

}
   


Nije bas elegantno resenje ... al mozda ti pomogne u ovom slucaju ...



Viva lollapalooza
 
Odgovor na temu

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.adsl.net.t-com.hr.



Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 14:40 - pre 192 meseci
Zahvaljujem svima koji su ucestovali , posebno mi se svidja rjesenje od <<deerbeer >> ,ali da l' je moguce ne pratiti to kroz aplikaciju , nego procitati iz sami WINDOWS-a , kada i gde je kliknuo mis, to procitati u thread -u i obraditi . hvala
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"28.05.2008. u 14:46 - pre 192 meseci
Citat:
Neznalica_sa_ugla: Zahvaljujem svima koji su ucestovali , posebno mi se svidja rjesenje od <<deerbeer >> ,ali da l' je moguce ne pratiti to kroz aplikaciju , nego procitati iz sami WINDOWS-a , kada i gde je kliknuo mis, to procitati u thread -u i obraditi . hvala


Mozes,al cisto sumnjam da ces moci to u .NET-u
Postoje mehanizmi na WINDOWs-u koji ti omogucavaju da pratis Mouse evente na sistemu ..
i to se radi kroz MouseHook DLL -ove ali onda moras to da odradis u C++ -u


Viva lollapalooza
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"29.05.2008. u 13:50 - pre 192 meseci

Malo je offtopic posto singlton nije prihvacen kao resenje, ali samo da napomenem da locking koji si napravio u ovom primeru ne funkcionise, da bi singlton bio thread-safe lockovi moraju da se stave na static i instance operacijama singletona, ne samo na instance get accessor. Ovime sprecavas da dva thread-a u isto vreme dodju do instance singletona ali ih nista ne sprecava da se kad jednom dodju do reference ne sudare u nekoj od metoda. Takodje generisanje instance singletona mozes da ostavis u class initializer-u i da lockovanje radis kroz lock(instance)/lock(this) u zavisnosti da li je metod staticki/instance.

Citat:
deerbeer: Static promenljive nisu thread-safe ...
a pomenuti Singleton sablon ni on nije thread-safe posto nema thread-lock-ova nad objektom.
Code:

public class Singleton
{

     static Singleton instance = null;
     static readonly object padlock = new object();
...

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

[es] :: .NET :: .NET Desktop razvoj :: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"

[ Pregleda: 3538 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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