【问题标题】:Mouse cursor location messes up on form resize鼠标光标位置在表单调整大小时搞砸了
【发布时间】:2012-06-22 06:56:35
【问题描述】:

我有一个函数,可以在调用拖动事件时将某个文本框的位置设置为鼠标光标的位置。

private void DGVLogicSimView_DragOver(object sender, DragEventArgs e)
{
    txtBoxDragPoint.Visible = true;
    txtBoxDragPoint.BackColor = Color.LightSkyBlue;
    txtBoxDragPoint.Location = new Point(e.X, e.Y);
    e.Effect = DragDropEffects.Copy;
}

当表单最大化时,上述事件完美运行。但是,当表单未最大化并位于桌面中的某个随机位置时,txtbox 位置就会变得一团糟。

我相信它返回的是相对于表单而不是屏幕的鼠标位置。最好的解决方案是什么?

【问题讨论】:

    标签: c# .net winforms mouse


    【解决方案1】:

    是的,这是因为 D+D 事件以屏幕坐标而不是客户端坐标传递鼠标位置。您需要映射相对于文本框父级的位置,如下所示:

     txtBoxDragPoint.Location = txtBoxDragPoint.Parent.PointToClient(new Point(e.X, e.Y));
    

    【讨论】:

      【解决方案2】:

      坐标确实与屏幕无关。

      您可以尝试更改此设置:

      txtBoxDragPoint.Location = new Point(e.X, e.Y);
      

      对此(假设 DGVLogicSimView 是您悬停的控件的名称)

      txtBoxDragPoint.Location = new Point(DGVLogicSimView.Left + e.X, DGVLogicSimView.Top + e.Y);
      

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 2011-11-07
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        相关资源
        最近更新 更多