C#利用鼠标中键移动控件容器画布

本文档介绍了如何在使用鼠标中键时,通过理解AutoScrollPosition的特性,实现画布的精确滚动控制。着重讲解了在设置AutoScrollPosition时,自动取反值的机制,并提供了相关代码片段作为示例。
摘要由CSDN通过智能技术生成

注意:this.AutoScrollPosition赋值时,会自动对x,y值取反。

        #region "鼠标中键移动画布"

        bool mouseDownState = false;
        Point scrollPositionOldPoint = new Point();
        Point mouseHitOldPoint = new Point();

        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (e.Button != MouseButtons.Middle)
            {
                return;
            }
            mouseHitOldPoint = e.Location;
            scrollPositionOldPoint = new Point(Math.Abs(this.AutoScrollPosition.X), Math.Abs(this.AutoScrollPosition.Y));            
            this.Cursor = Cursors.Hand;
            mouseDownState = true;

        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if (!mouseDownState)
            {
                return;
            }
            int x = e.Location.X - mouseHitOldPoint.X;
            int y = e.Location.Y - mouseHitOldPoint.Y;
            //注意:this.AutoScrollPosition赋值时,会自动对x,y值取反。
            this.AutoScrollPosition = new Point(scrollPositionOldPoint.X - x, scrollPositionOldPoint.Y - y);
        }
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            this.Cursor = DefaultCursor;
            mouseDownState = false;
        }
        #endregion

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值