Hoşgeldiniz

 

 

Oturum Açın | Kaydol | Son Mesajlar | Mesajlarım | Yardım
kategorisinde Ara

GetChildAtPoint

En son mesaj egenem17 tarafından 10-13-2008, 19:57 atıldı. Başlığa toplam 2 cevap verildi.
Sort Posts: Önceki Sonraki
  •  10-12-2008, 12:06 37340

    GetChildAtPoint

    Merhaba,

    Ben formumda 64 adet Label kullanıyorum. Bu label-ların bazılarında resimler(Image) mevcut olacak ve bu resimleri dragdrop ile sürükleyip başka label-ların  üzerine bırakacağım. Yani kısacası satranç tahtası bu.

    Sürükle bırakta sorun yok. Fakat tuttuğum nesnenin hangisi olduğunu bilmem lazım. Bunun için Click olayında(form'un click olayı) faremin dokunduğu label'ın adını almaya çalışıyorum. Kodum da bu;

    MessageBox.Show(GetChildAtPoint(Cursor.Position).ToString());

    Bu kod ise devamlı "Object reference not set to an instance of an object." hatası fırlatıyor. Öyle ki bu labelları bir panel içerisine almayı denedim, bu sefer de panel dışına tıklayınca hata fırlatıyor. Fakat yine nereye tıklarsam tıklayayım hiçbir sonuç alamıyorum.

    Bu kodu nasıl çalıştırabilirim?


    Çok pis yazarım:)
  •  10-13-2008, 1:29 37354 cevaben 37340

    Cvp: GetChildAtPoint

    Meraba,

    Form click e yazacağım metod, form üzerindeki herhangi bir kontrol üzerinde çalışmayacaktır. O kontroller üzerinde , kontrole ait mouse click olayı çalışır. Formclick olayı form üzerindeki boş yerlerde çalışır. Onun için Cursor position unu alabilmek için label ların mouse click olayına yazılması gerekiyor. Labelların hepsinin toplu olarak mouseclick olayına bir kerede metod yazabilirsin. Ama onu da yazsan, bir noktanın cursor position daki değerlerle, control location daki değerler tam olarak uymuyor. Örneğin 10,10 noktasında bir label oluşturursan , daha sonra label üzerindeki bütün yerleri tıklayıp değerlerine bakarsan 10,10 değerini göremeyebilirsin. Çünkü cursor position i  senin ekrana göre değer alır.

    Nokta olarak e.X ve e.Y kullanırsak bu sonuca biraz yaklaştırıyor fakat kontrol üzerinde birden fazla nokta var. Kontrolun location u sadece o kontrolün bir noktası.

    Şöyle birşey belki işine yarayabilir. Label ların buttonclick olayına aşağıdaki kodu yazarsan, tıklanan label ı sd label ına atamış oluyorsun , ondan sonran sd nin istediğin bilgisini alabilirsin.

    Label sd = new Label();

    sd = (Label)sender;

    MessageBox.Show(sd.Name);

    İyi Çalışmalar


    Omega Zafer
    Fatih Bilge Adam
  •  10-13-2008, 19:57 37386 cevaben 37354

    Cvp: GetChildAtPoint

    Cevabın için teşekkürler omega.

    Form'un click olayının forma ait kontroller üzerinde çalışmadığını ben de tespit ettim. Ayrıca formun herhangi bir noktasına tıklaman, forumda tıklanan noktadan farklı noktalar döndürebiliyor Cursor.Position'da. Çünkü tıkladığın yer windows üzerinde bir yer aslında. Dolayısı ile Cursor.Position ile senin gerçekte formunda tıkladığıın nokta arasında fark oluyor, farklı koordinatlar döndürüyor. Onu da keşfetmiş oldum.

    Location'a gelince, evet, kontrole ait sol-üst köşe koordinatını döndürüyor. Ama o önemli değil. Location'ın X ve Y değerlerine Control.Size.Width ve Control.Size.Height değerlerini ekleyince bir dörtgen oluşuyor ve aradığın(tıkladığın) noktanın koordinatlarını bu sınırlar içinde aratarak kolaylıkla alabiliyorsun.

    Verdiğin kod ise işimi gördü, çok teşekkür ederim.

    İyi çalışmalar...


    Çok pis yazarım:)
View as RSS news feed in XML
Powered by Community Server, by Telligent Systems