2010-10-04 2 views
6

Momentan gibt mir mein Mausklick auf das Formular die x, y Kabel in einem Etikett. Dieses Label, wenn ich darauf klicke, bekomme ich den mousedown nicht. Aber wenn ich den Code in den mousedown für das Etikett einfüge, gibt es die Schnüre basierend auf dem Ursprung des Etiketts und nicht das gesamte Formular.Wie kann ich X-, Y-Positionen der Maus relativ zur Form erhalten, selbst wenn Sie auf ein anderes Steuerelement klicken?

Mein Ziel ist es, x, y überall in der Form zu erkennen. Auch wenn es sich um ein Label handelt, Schaltfläche.

Vielen Dank im Voraus.

+1

Bitte beschreibenden Titel für Ihre Fragen bereitstellen. Titel wie "C# Winform Question" usw. liefern keine Bedeutung. –

Antwort

4

scheint ein bisschen wie ein Hack, aber ...

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

Also geht das im Grunde jedes der Kontrollen, wie Checkboxen, Labels und alles und dann c.MouseDown + = ShowMouseDown; nimmt die ShowMouseDown-Methode und legt sie in den C.MouseDown. Ich verstehe nicht ganz, was htis Zeile macht, this.MouseDown + = (s, e) => {this.label1.Text = e.X + "" + e.Y; }; – RoR

+0

Ich bin neu in C#, ich entschuldige mich. Auch was ist Objekt Absender? Ist das der Name der Kontrolle? Was ist (Kontroll-) Absender? Vielen Dank für Ihre Zeit. – RoR

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

Dies ist für onmousemove. Ich benötige einen Klick mit der Maustaste nach unten, um genau das x, y zu erfassen. Sie können aber auch innerhalb eines Labels klicken und das x, y des gesamten Formulars erhalten. – RoR

2

können Sie durch this.Location einstellen.
oder verwenden Sie this.PointToClient(Cursor.Position) auf Formular und jedem Steuerelement.

+0

nicht ganz sicher, was Sie meinen, dies anpassen.Lage. Ich habe versucht, die Location e.Location.X.ToString() zu verwenden, gibt mir aber genau die gleiche Antwort wie e.X.ToString(). Was ist Standort? – RoR

+0

Sorry wegen meiner undeutlichen Antwort. Ich wollte die Position der Kontrolle (Sie können Links, Oben) bedeuten. Mit dem Ereignis "mouse down" der Steuerung können Sie: this.Location.X + e.X relativ zum Formular abrufen. Auf die zweite Weise können Sie this.PointToClient (Cursor.Position) in Form mit der Maustaste nach unten verwenden, und jede für jedes Steuerelement, das Sie haben, können Sie eine Schleife verwenden, um Event-Handle wie JP Alioto vorgeschlagen anzuhängen. – pinichi

3

Sie den Ort wie dieser this.PointToClient bekommen kann (Cursor.Position) auf dem Formular für jede Kontrolle.

2

Ich weiß, das war vor einer Weile, aber ich dachte, es könnte jemandem helfen. Ich denke, der Weg dazu ist rekursiv:

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... 
    } 
} 
} 
Verwandte Themen