Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将鼠标位置设置为相对窗体而不是相对屏幕?_C#_Winforms_Mouse - Fatal编程技术网

C# 如何将鼠标位置设置为相对窗体而不是相对屏幕?

C# 如何将鼠标位置设置为相对窗体而不是相对屏幕?,c#,winforms,mouse,C#,Winforms,Mouse,首先,我想说我的C#“技能”相当基本 因此,我试图将工具提示添加到列表框中的所选项目中,当用户单击相关项目时会发生这种情况 因此,我询问我对PointToClient的使用是否正确,因为我认为问题就在这里。还是我完全错了(可能是这样的) 提前感谢。因为工具提示位置指的是show()构造函数中的输入控件,所以您不需要关心主窗体位置。只要跳过“PointToClient”部分,你就会没事的 如果SelectedIndexChanged不是由code引起的,而是由用户单击您的列表框引起的,则包含您的列

首先,我想说我的C#“技能”相当基本

因此,我试图将
工具提示添加到
列表框
中的所选项目中,当用户单击相关项目时会发生这种情况

因此,我询问我对
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);
    }