zoukankan      html  css  js  c++  java
  • C# 拖动控件 不闪

    如何让控件支持拖动(不是拖放)呢?很简单的

    只需要处理鼠标按下、移动、释放三个消息就可以了,按下时开始记录鼠标位置,移动时计算鼠标移动距离,重设控件位置,鼠标释放时结束拖动

    下面这段代码可以直接应用于任何控件,参数Control是所有控件的基类,因此可以应用于任何控件

    m_OnDrag标示是否在拖动中

    m_LastPoint记录上一次鼠标的位置

    这里面没有使用事件参数提供的鼠标位置,因为这个值飘得厉害,会闪,用Cursor.Position就不会闪

    PointToClient用来把屏幕坐标换算成客户区位置

        class DragControl
        {
            static public bool m_OnDrag = false;
            static private Point m_LastPoint = new Point();
            static public void EnableDrag(Control control)
            {
                //添加事件处理程序
                control.MouseDown += new MouseEventHandler(MouseDown);
                control.MouseMove += new MouseEventHandler(MouseMove);
                control.MouseUp += new MouseEventHandler(MouseUp);
            }
            static private void MouseDown(object sender, MouseEventArgs e)
            {
                Control control = (Control)sender;
                Point newpoint = control.Parent.PointToClient(Cursor.Position);
    
                m_LastPoint = newpoint;
                m_OnDrag = true;
            }
            static private void MouseMove(object sender, MouseEventArgs e)
            {
                if (m_OnDrag)
                {
                    Control control = (Control)sender;
                    Point newpoint=control.Parent.PointToClient(Cursor.Position);
                    
                   Point tmp=new Point(control.Location);//这几句临时写的,未经测试(因为原来的代码涉及到别的内容) 
             tmp.X
    += newpoint.X - m_LastPoint.X; tmp.Y += newpoint.Y - m_LastPoint.Y;
             control.Location=tmp;
    m_LastPoint = newpoint; } } static private void MouseUp(object sender, MouseEventArgs e) { m_OnDrag = false; }
    }
  • 相关阅读:
    2020.06.09——习题训练五
    2020.06.01——习题训练4
    2020-05-26 — 习题训练三
    2020-05-22 — 习题训练二-F
    Java笔记(22):IO流(04)
    Java笔记(21):IO流(03)
    Java笔记(20):IO流(02)
    Java笔记(19):IO流(01)
    Java笔记(18):集合框架(04)
    Java笔记(17):集合框架(03)
  • 原文地址:https://www.cnblogs.com/shadowpigg/p/14025333.html
Copyright © 2011-2022 走看看