2010-10-04 13 views
6

Halihazırdaki formda yer alan espriler bana bir etiket içinde x, y kordlar verecek. Bu etiket üzerine tıkladığımda, mousedown'u alamıyorum. Ancak kodu etikete eklediğimde, kordları tüm formun değil, etiketin kaynağına göre verir.Başka bir kontrol düğmesine tıklarken bile, X, Y farelerinin formunu göreceli olarak nasıl alabilirim?

Amacım, formun herhangi bir yerinde x, y'yi algılayabilmektir. Bir etikette olsa bile, düğme.

Şimdiden teşekkürler.

+1

Lütfen sorularınız için açıklayıcı başlıklar verin. "C# Winform Question", vb. Gibi başlıklar herhangi bir anlam ifade etmemektedir. –

cevap

4


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

     foreach (Control c in this.Controls) 
     { 
      c.MouseDown += ShowMouseDown;  
     } 

     this.MouseDown += (s, e) => { this.label1.Text = e.X + " " + e.Y; }; 

    } 

    private void ShowMouseDown(object sender, MouseEventArgs e) 
    { 
     var x = e.X + ((Control)sender).Left; 
     var y = e.Y + ((Control)sender).Top; 

     this.label1.Text = x + " " + y; 
    } 
} 
+0

Bu, temel olarak, onay kutularının, etiketlerin ve herhangi bir şey gibi Kontrollerin her birinden geçer ve sonra c.MouseDOwn + = ShowMouseDown; ShowMouseDown yöntemini alıyor ve onu C.MouseDown içine koyarak. Htis hattının ne yaptığını tam olarak anlayamıyorum, bu.MouseDown + = (s, e) => {this.label1.Text = e.X + "" + e.Y; }; – RoR

+0

C# 'da yeniyim, özür dilerim. Ayrıca nesne gönderen nedir? Bu kontrolün adı mı? (Kontrol) gönderen nedir? Zaman ayırdığın için teşekkürler. – RoR

3
protected override void OnMouseMove(MouseEventArgs mouseEv) 
{ 
    txtBoxX.Text = mouseEv.X.ToString(); 
    txtBoxY.Text = mouseEv.Y.ToString(); 
} 
+0

Bu, onmousemove içindir. Bu x, y cordinate'i yakalamak için fare düğmesini tıklatmam gerek. Ancak ayrıca bir etiketin içine tıklayabilir ve genel formun x, yini alabilir. – RoR

2

this.Location ile ayarlayabilirsiniz.
veya form ve her denetimde this.PointToClient(Cursor.Position) kullanın.

+0

bunun ne demek istediğini tam olarak bilmiyor.Konum. Location e.Location.X.ToString() kullanarak kullanmayı denedim, ancak bana e.X.ToString() ile tam olarak aynı yanıtı verir. Yer Nedir? – RoR

+0

Üzgünüz cevabım yüzünden üzgünüm. Kontrol Noktası demek istedim (Solu, Üstü kullanabilirsiniz). Denetimin fare aşağı olayından aşağıdakileri kullanabilirsiniz: forma göre elde etmek için this.Location.X + e.X. İkinci olarak, Form faresindeki this.PointToClient (Cursor.Position) öğesini kullanabilir ve sahip olduğunuz her denetim için JP Alioto'nun önerdiği gibi olay tanıtıcısını eklemek için bir döngü kullanabilirsiniz. – pinichi

3

Her kontrol için formdaki bu this.PointToClient (Cursor.Position) gibi yerini alabilir ... kesmek biraz görünüyor ama.

2

Bunun bir süre önce olduğunu anlıyorum, ama birilerine yardımcı olabileceğini düşündüm. Bence bu konuyla ilgili şu şekilde düşünebilirsiniz:

public partial class Form1 : Form 
{ 

public Form1() 
{ 
    InitializeComponent(); 
    label1.MouseDown += MyMouseDown; 
} 

void MyMouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left)//If it's left button that's the trigger 
    { 
     Control c = (Control)sender; 
     if (c.Parent == null) return;//Has no more children, wrong condition? 
     if(c.Parent != this)//We've reached top level 
     { 
      MyMouseDown(c.Parent, new MouseEventArgs(e.Button, 
       e.Clicks, 
       c.Parent.Location.X + e.X, 
       c.Parent.Location.Y + e.Y, 
       e.Delta)); 
      return; 
     } 
     //Do what shall be done here... 
    } 
} 
} 
İlgili konular