我想获取执行点击事件的控件的位置
为此,我尝试了以下代码
Xpos = Cursor.Position.X;
Ypos = Cursor.Position.Y;
但是这给出了光标的当前位置。然后我尝试了以下代码
MouseEventArgs m = (MouseEventArgs)e;
Xpos=m.X;
Ypos=m.Y;
但此位置不是相对于整个屏幕。
如何获取执行点击事件的控件位置?
修改
作为为重复项提供的链接,它提供执行点击操作的点的位置,而没有提供执行点击操作的控件的位置。
答案 0 :(得分:0)
您可以试试吗?它应该返回您期望的值(单击控件的左上角)。
XAML:
<TextBlock Text="Sample" Width="100" Height="50"
MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
XAML.cs
private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var control = sender as FrameworkElement;
var positionToScreen = control.PointToScreen(new Point(0, 0));
}
答案 1 :(得分:0)
如果您的项目位于WindowsFormApplicaiton
中,则
如果您的控件像屏幕截图一样button
然后,您还可以在其主屏幕和表单屏幕中访问其位置
下面是代码
private void button1_Click(object sender, EventArgs e)
{
//This code gives you the location of button1 wrt your primary working screen
Point location = this.PointToScreen(button1.Location);
int x1 = location.X;
int y1 = location.Y;
MessageBox.Show($"X: {x1}, Y: {y1}");
//This code gives you the location of button1 wrt your forms upper-left corner
Point relativeLoc = new Point(location.X - this.Location.X, location.Y - this.Location.Y);
int x2 = relativeLoc.X;
int y2 = relativeLoc.Y;
MessageBox.Show($"X: {x2}, Y: {y2}");
//This code gives you the location of button1 wrt your forms client area
Point relativeLoc1 = new Point(button1.Location.X, button1.Location.Y);
int x3 = relativeLoc1.X;
int y3 = relativeLoc1.Y;
MessageBox.Show($"X: {x3}, Y: {y3}");
}
在上面的代码中,我使用了this
,您可以根据需要使用任何forms
对象
编辑:
如果您不知道控件的单击位置,则必须在
之类的表单中为所有控件注册一个事件。在下面的代码中,我使用了MouseHover
事件,但是您可以根据需要使用任何事件
首先为MouseHover
内部的所有控件注册Form1_Load
事件,例如
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
c.MouseHover += myMouseHoverEvent;
}
那么您的自定义MouseHover
事件是
private void myMouseHoverEvent(object sender, EventArgs e)
{
Control control = sender as Control;
int x = control.Location.X;
int y = control.Location.Y;
MessageBox.Show($"X: {x}, Y: {y}");
}
尝试一次可能对您有帮助
答案 2 :(得分:0)
如果让此事件处理程序处理您感兴趣的所有控件的MouseClick事件,此代码应该可以解决您的问题。 如果要将位置包括在单击的控件内。然后添加鼠标事件args中的位置(代码中的Se注释)。
private void control_MouseClick(object sender, MouseEventArgs e)
{
Control control = sender as Control;
int posX = control.Location.X;
int posY = control.Location.Y;
//Add e.X respectivly e.Y if you want to add the mouse position within the control that generated the event.
while (control.Parent != null)
{
control = control.Parent;
posX += control.Location.X;
posY += control.Location.Y;
}
((Label)sender).Text = "X: " + posX + " Y: " + posY;
}