locked
MouseDown事件後不會處理Click事件 RRS feed

  • 問題

  • 目前在實作 拖曳物件顯示縮圖的功能

            private void label1_MouseDown(object sender, MouseEventArgs e)
                {                
                    Control send = (Control)sender;
                    Bitmap bmp;
                    
                    bmp = new Bitmap(send.Width, send.Height);
                    send.DrawToBitmap(bmp, new Rectangle(Point.Empty, 
    
                    this.BitMapCursor = new Cursor(bmp.GetHicon());
                    send.DoDragDrop(send.Text, DragDropEffects.All);
                }

    但執行 DoDragDrop 後 就不會繼續處裡Click/MouseUp 等事件

    預期效果是 滑鼠按住時出現拖曳效果 單純點擊則觸發點擊事件

    想請問先進們該怎麼處理這個問題呢?


    • 已編輯 KC1984 2022年4月20日 下午 02:53
    2022年4月20日 下午 02:27

解答

  • 結果自己解了 

    判斷按鈕是否持續按住 按住時移動一定距離之後才觸發拖曳效果

    如果沒有就往後續事件處理

            Point _startDragPoint;
            private bool _capture = false;
            private void Item_MouseDown(object sender, MouseEventArgs e)
            {
                _capture = true;
                //略
            }
    
            private void Item_MouseMove(object sender, MouseEventArgs e)
            {
                Control send = (Control)sender;
                if (_capture) {
                    if (System.Math.Abs(e.X - _startDragPoint.X) > 30 ||
                         System.Math.Abs(e.Y - _startDragPoint.Y) > 30)
                    {
    
                        send.DoDragDrop(text, DragDropEffects.All);
                    }
                }
    
            }


    • 已標示為解答 KC1984 2022年4月20日 下午 03:53
    2022年4月20日 下午 03:17