C# 如何将鼠标位置设置为相对窗体而不是相对屏幕?
首先,我想说我的C#“技能”相当基本 因此,我试图将C# 如何将鼠标位置设置为相对窗体而不是相对屏幕?,c#,winforms,mouse,C#,Winforms,Mouse,首先,我想说我的C#“技能”相当基本 因此,我试图将工具提示添加到列表框中的所选项目中,当用户单击相关项目时会发生这种情况 因此,我询问我对PointToClient的使用是否正确,因为我认为问题就在这里。还是我完全错了(可能是这样的) 提前感谢。因为工具提示位置指的是show()构造函数中的输入控件,所以您不需要关心主窗体位置。只要跳过“PointToClient”部分,你就会没事的 如果SelectedIndexChanged不是由code引起的,而是由用户单击您的列表框引起的,则包含您的列
工具提示添加到列表框
中的所选项目中,当用户单击相关项目时会发生这种情况
因此,我询问我对PointToClient
的使用是否正确,因为我认为问题就在这里。还是我完全错了(可能是这样的)
提前感谢。因为工具提示位置指的是show()构造函数中的输入控件,所以您不需要关心主窗体位置。只要跳过“PointToClient”部分,你就会没事的 如果SelectedIndexChanged
不是由code引起的,而是由用户单击您的列表框引起的,则包含您的列表的表单将是活动表单
,并且代码正常,但是您必须将鼠标位置
分配给指向客户端()的返回值
像这样mouseLocation=Form.ActiveForm.PointToClient(mouseLocation)
或更简单的pointmouseLocation=Form.ActiveForm.PointToClient(MousePosition)代码>@KingKing问题似乎在于工具提示不是相对于窗体绘制的,而是相对于屏幕绘制的。。。根据我的输出。@MarcusWigert您没有听到PointToClient
返回的新值,您的预期用途是正确的,您的实际用途只需要稍作更改。
public void Listb_SelectedIndexChanged(object sender, EventArgs e)
{
ToolTip tooltip = new ToolTip();
ListBox temp = sender as ListBox;
Point mouseLocation = Control.MousePosition;
Form.ActiveForm.PointToClient(mouseLocation);
int idx = (int)temp.Tag;
tooltip.Show(DaysList[idx].Elements[temp.SelectedIndex].EventDate, temp, mouseLocation);
}