2013-03-05 143 views
1

我得到Panel並在其中有一些自定義控件的拖放操作,當拖動開始時,我做了panel.Capture = True;讓面板觸發正確的事件,即使用戶在鼠標外部釋放鼠標左鍵(例如:panel_DragDrop),但DragDrop事件不會被觸發,除非在光標位於面板範圍內時釋放鼠標左鍵。拖放鼠標捕獲

我以爲panel.Capture會解決這個問題,但它沒有任何效果。任何想法我在這裏想念什麼?

編輯:好吧我想我知道我現在要做什麼。我想我對DragDrop事件有一個誤解。我的應用程序中只有拖動面板內的控件(將其視爲移動塊),而當用戶拖動塊並超出界限時,我會自動滾動,如果光標離開面板,則panel_DragDrop永遠不會被調用,如果鼠標被釋放,塊的放置不會發生。我認爲我的解決方案是這樣的: Cursor.Clip = panelDiagram.RectangleToScreen(panelDiagram.ClientRectangle);

這將使光標在拖動時綁定到面板邊界,所以沒有辦法讓光標離開邊界。

對不起任何麻煩

回答

0

我剛剛創建一個小的測試項目,只是一種形式和麪板,這爲我工作:

using Microsoft.VisualBasic; 
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
public class Form1 
{ 

    public Form1() 
    { 
     DragDrop += DD; 
     DragEnter += Panel1DragEnter; 
     // This call is required by the designer. 
     InitializeComponent(); 

     // Add any initialization after the InitializeComponent() call. 
     Panel1.AllowDrop = true; 
     AllowDrop = true; 

    } 

    private void Panel1DragEnter(System.Object sender, System.Windows.Forms.DragEventArgs e) 
    { 
     if (object.ReferenceEquals(sender, Panel1)) { 
      Panel1.Capture = true; 
     } 

     if (Panel1.Capture) { 
      if ((e.Data.GetDataPresent(DataFormats.FileDrop))) { 
       e.Effect = DragDropEffects.Copy; 
      } else { 
       e.Effect = DragDropEffects.None; 
      } 
      Panel1.Capture = true; 
     } 

    } 

    private void DD(object sender, DragEventArgs e) 
    { 
     if (Panel1.Capture) { 
      Interaction.MsgBox("dropped"); 
     } 
     Panel1.Capture = false; 
    } 


} 

一旦你拖動面板上,它被捕獲,但主窗體仍然需要拖/丟處理程序

+0

對不起,但我不能做任何事情從你的例子。作爲一個孩子嘗試使用'Button'作爲'Panel'。在按鈕上啓用D&D,啓用面板上的捕獲並將面板上的按鈕拖出,panel1_DragDrop事件是否會觸發?這是我想要實現的。 – prettyvoid 2013-03-05 20:11:58

+0

請閱讀第一篇文章中的修改內容。 – prettyvoid 2013-03-05 20:39:00