张光荣的正能量 [机械软件...改革利剑...向着改变世界...]

博客园 首页 新随笔 联系 订阅 管理

原因: 由于 ListView 控件的 Mouse 相关事件无法获取 MouseButtons.Left 属性,从而 无法使用 MouseDown,MouseMove 事件在MouseButtons.Left 的情况下使其移动,

解决:用一个 Timer 对 MouseEventArgs 的 Button 进行检测,替换 ListView 控件的 MouseMove 事件处理

注:肯定还有更好的解决方法....

  public class Mover
            {

                 int locX, locY, mpX, mpY;
                 MouseEventArgs mea;
                 Timer timer = new Timer();
                 ListView lv;

                public Mover(ListView lv)
                {
                    this.lv = lv;

                    lv.MouseEnter += _MouseEnter;
                    lv.MouseDown += _MouseDown;
                    lv.MouseUp += _MouseUp;

                    timer.Tick += timer_Tick;
                }

                #region 

                public  void _MouseDown(object sender, MouseEventArgs e)
                {
                    mea = e;
                    lv = sender as ListView;
                    //拖动	
                    lv.BringToFront();
                    lv.Cursor = Cursors.Hand;

                    locX = lv.Location.X;
                    locY = lv.Location.Y;
                    mpX = Control.MousePosition.X;// e.X;
                    mpY = Control.MousePosition.Y;
                }
                public  void _MouseUp(object sender, MouseEventArgs e)
                {
                    timer.Stop();

                    mea = null;
                    lv.Cursor = Cursors.Default;
                }
                public  void _MouseEnter(object sender, EventArgs e)
                {
                    timer.Start();
                }
                private  void timer_Tick(object sender, EventArgs e)
                {
                    if (mea == null)
                        return;

                    if (mea.Button == MouseButtons.Left)
                    {
                        locX += Control.MousePosition.X - mpX;
                        locY += Control.MousePosition.Y - mpY;
                        mpX = Control.MousePosition.X;
                        mpY = Control.MousePosition.Y;
                        lv.Location = new Point(locX, locY);
                    }
                }

                #endregion
            }

  

使用方法: Mover mover=new Mover(listView1); --只需用 需要 鼠标移动的 listView1 来实例化 mover 即可

交流 QQ : 2412366909@qq.com

手机号码:177-7499-4428

注:本人使用过程中暂未发现造成存取不正确的问题

posted on 2021-05-21 23:34  张光荣的正能量  阅读(203)  评论(0)    收藏  举报