folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# Mouse Altındaki Control'e Ulaşmak ?



C# Mouse Altındaki Control'e Ulaşmak ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tqrL
    tqrL's avatar
    Kayıt Tarihi: 07/Temmuz/2010
    Erkek

    Formumda birkaç sayfadan oluşan bir tabcontrol mevcut sayfaların içinde de veri gösterdiğim datagrid,listbox,treeview nesneleri var.

    bu nesnelere contextmenustrip eklemek istiyorum fakat hepsine ayrı ayrı contextmenustrip eklemek yerine

    örneğin yenileToolStrip in click eventında tıklamanın hangi controlden geldiğini bulup ona göre işlem yapmam gerekiyor yani

     

    void yenileToolStrip_click()

    {

    if(gelen==grid1)

    grid1.temizle();

    grid1.doldur();

    }

    //yada

    if(gelen==list1)

    {

    list1.temizle();

    list1.doldur();

    }

    }

    gibi

    mouse position'a göre mouseun altındaki controlü bulmaya çalıştım

    (http://stackoverflow.com/questions/2411062/how-to-get-control-under-mouse-cursor)

    (http://stackoverflow.com/questions/586479/is-there-a-quick-way-to-get-the-control-thats-under-the-mouse)

     

    // Console.Writeline(ControlNavigatorHelper.getYoungestChildUnderMouseControl(tabControl).Name);

    fakat örnek parametre olarak tabcontrol veriyorum bana tabPage dönüyor grid dönmüyor.

    bu olayı en kısa nasıl halledebilirim ?

    Teşekkürler :)

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ercan
    Ercan's avatar
    Kayıt Tarihi: 04/Temmuz/2008
    Erkek

    Yapmak istediğin şeyi tam olarak anlıyamadığımdan kesin bi cevap veremiyorum,

    Eğer forum da ki belli nesnelere context menü vermek istiyorsan ve bunu tek tek yapmak istemiyorsan formun loadında yada kurucu methodunda forum controllerini foreach ile çekersin istediğin türdeki nesneleri sorgu ile kontrol edersin uyarsa context menünü ayalarlarsın.


    IF YOU ARE NOT TİRED, YOU ARE NOT DOING IT RIGHT
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ntxsoft
    ntxsoft's avatar
    Kayıt Tarihi: 05/Kasım/2005
    Erkek

    Senin bulduğun örnektekiler form eventlerinde kullanınca sadece formun childlarında işe yaradı. GetChildAtPoint methodu form'un childlarının childlarına bakmıyor. O yüzden bende aşağıdaki gibi bir yaklaşımla tüm controllere mouse eventi verdim. Aşağıdaki eventte hangi kontrolün üzerine tıklanırsa o event çalışacağı için controlü console'a yazdırabiliyor. Tabii bu yaklaşım senin tam istediğin olmayabilir. Düşüncelerini bekliyorum.

    public Form1()

            {

                InitializeComponent();

     

                this.MouseClick += new MouseEventHandler(c_MouseClick);

                setMouseClickEventToChild(this); 

            }

     

            private void setMouseClickEventToChild(Control topControl)

            {

                foreach (Control c in topControl.Controls)

                {

                    c.MouseClick += new MouseEventHandler(c_MouseClick);

                    if (c.HasChildren)

                        setMouseClickEventToChild(c);

                }

            }

     

            public void c_MouseClick(object sender, EventArgs e)

            {

                if (sender is Control)

                {

                    Console.WriteLine(((Control)sender).Name);

                }

            }


    enginkirmaci.com | Kişisel web sitesi, uyetakip.com | Ücretsiz Üye Takip Programı
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    rakkoc
    rakkoc's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    istedigi mause'nin altinda ne var onu bulmak anladigim kadari ile dogrumu ?


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manglerman
    manglerman's avatar
    Kayıt Tarihi: 30/Aralık/2003
    Erkek

    bütün kontrollerin mouseover voidini override yap. controlun gettype sinden sırayla hangi kontrol olduğunu bul(button,label,dropdownlist vb)

    ondan sonra bulduğun kontrolü gerçek tipine çevir Label lbl=(Label)control şeklinde. oradan da lbl.Id ile id sini çek.

     

    bu kadar uzun yazdığıma bakma çok basit.


    türk kızlarından sabun yapalım, rus kızları elini yıkasın.:)
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    temizle clickte sana sender ile kimin yolladığı gelecek. oradan ayırt edebilirsin. bi üst mesajda var.

    üst mesajda override bilmem ne gerek yok. direk olarak click içinde gelecek sender


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manglerman
    manglerman's avatar
    Kayıt Tarihi: 30/Aralık/2003
    Erkek

    SharpShooter bunu yazdı:
    -----------------------------

    temizle clickte sana sender ile kimin yolladığı gelecek. oradan ayırt edebilirsin. bi üst mesajda var.

    üst mesajda override bilmem ne gerek yok. direk olarak click içinde gelecek sender


    -----------------------------

     

    :) ben başlığı okudum ve direk daldım. tıklamasına gerek kalmadan hangi controlün üstünde olduğunu bulması gerektiğini anlattım. ama demekki mesajıda okumak gerekiyormuş :) başlık biraz eksik olmuş :)

     

    sorunun net cevabına gelince :

            Control cnt = (Control)sender;
            switch (cnt.GetType().Name.ToString())
            { 
                case "TextBox":
                    TextBox txt = (TextBox)cnt;
                    //işlemler
                    break;
                case "Button":
                    Button btn = (Button)cnt;
                    //işlemler
                    break;
                case "Label":
                    Label lbl = (Label)cnt;
                    //işlemler
                    break;
            }

    türk kızlarından sabun yapalım, rus kızları elini yıkasın.:)
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tqrL
    tqrL's avatar
    Kayıt Tarihi: 07/Temmuz/2010
    Erkek

    teşekkürler beyler sender ile yapabildim :)

     Control _control = ((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl;

    ile control alıp _control.GetType().Name controlün ne olduğu _control.Name ile control adı alınabiliyor.

     

    //ÖRNEK

    Control _control = ((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl;

    switch (_control.GetType().Name)
    {
                 case "DataGridView":

                   //......

                  break;
    }

Toplam Hit: 1880 Toplam Mesaj: 8