【问题标题】:Clipping cursor to a panel将光标剪切到面板
【发布时间】:2018-03-28 03:25:06
【问题描述】:

有什么方法可以将光标移动仅剪辑到面板区域?我正在尝试从面板中获取坐标,并且在用户第一次单击鼠标后,光标应该移动到面板并一直保持在那里直到第二次单击鼠标。感谢您的回答。

【问题讨论】:

  • 这是XY problem;你有一些问题 X 并想“我知道!我只会将光标移动剪辑到面板区域”。为了帮助我们,我们需要知道 X;为什么你认为“光标应该移动到面板并在那里保持剪辑”?
  • 所以用户点击按钮在面板上放置一个点。所以我想将光标移动到面板上并停留在那里,直到第二次单击选择了该点。

标签: c# cursor cursor-position


【解决方案1】:

我在这里做了一些假设:

  • 您使用的是 windows 窗体
  • 剪切光标意味着移动光标

这是我将光标从一个面板移动到另一个面板的示例代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void panel1_Click(object sender, EventArgs e)
    {
        Cursor.Position = CenterPoint(panel2);
    }

    private void panel2_Click(object sender, EventArgs e)
    {
        Cursor.Position = CenterPoint(panel1);
    }

    private Point CenterPoint(Control control)
    {
        return new Point(
            Left + control.Left + control.Width / 2, 
            Top + control.Top + control.Height / 2);
    }

}

您可以在 MouseMove 事件上遵循类似的逻辑来限制移动

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.X - panel1.Left < 20 && e.Y - panel1.Top < 20)
        {
            Cursor.Position = CenterPoint(panel1);
            Console.WriteLine($"{e.X} {e.Y}");
        }
    }

这将在面板的左上角创建一个“No-Go”区域,如果光标进入该区域,我们会将其发送回中心

【讨论】:

  • 是的,我使用的是 Windows 窗体。是的,你说得对,我的意思是只在面板区域移动光标。
  • 那么Cursor.Position 就是你所需要的!明智地使用它,否则您的应用程序会感觉很奇怪
  • 感谢这帮了大忙。我将光标移动到左上角并使用 Cursor.Clip = new Rectangle(panel1.Location, panel1.Size);把它夹在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多