加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 模拟拖动窗口标题栏的控件

发布时间:2020-12-15 18:22:20 所属栏目:百科 来源:网络整理
导读:我已经构建了一个自定义控件,我想让人们点击并拖动我的控件,就像他们在窗口标题栏上拖动一样.做这个的最好方式是什么? 到目前为止,当窗口需要移动时,我没有成功地利用鼠标按下,向上和移动事件来解密. 解决方法 除了我的其他答案,您可以在控件中手动执行此操
我已经构建了一个自定义控件,我想让人们点击并拖动我的控件,就像他们在窗口标题栏上拖动一样.做这个的最好方式是什么?

到目前为止,当窗口需要移动时,我没有成功地利用鼠标按下,向上和移动事件来解密.

解决方法

除了我的其他答案,您可以在控件中手动执行此操作,如下所示:
Point dragOffset;

protected override void OnMouseDown(MouseEventArgs e) {
    base.OnMouseDown(e);
    if (e.Button == MouseButtons.Left) {
        dragOffset = this.PointToScreen(e.Location);
        var formLocation = FindForm().Location;
        dragOffset.X -= formLocation.X;
        dragOffset.Y -= formLocation.Y;
    }
}

protected override void OnMouseMove(MouseEventArgs e) {
    base.OnMouseMove(e);

    if (e.Button == MouseButtons.Left) {
        Point newLocation = this.PointToScreen(e.Location);

        newLocation.X -= dragOffset.X;
        newLocation.Y -= dragOffset.Y;

        FindForm().Location = newLocation;
    }
}

编辑:测试和修复 – 现在实际上工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读