2012-12-23 67 views
0

我有兩個用戶之間的拖動和放下控制

1)的用戶控制UC(由單選按鈕,文本框)

2),其包含多於一個的UC型控制

一種形式的

我想啓用這些UC控件之間的拖放和下降(例如 - 上拖動一個控件到另一個會增加從源頭上控制的組成TextBox控件文本到目標控制的組成部分TextBox控件)

我做了什麼到目前爲止:

1)I已經設置UC和它的組成控制的AllowDrop =真

2)在容器形式我寫方法UC控制的MouseDown,dragEnter事件和的DragDrop事件

其結果是:

如果我拖放使用不包含組成控件的UC部分 - 也就是說,如果我按下UC組成TextBox控件上的鼠標按鈕,UC MouseDown未被觸發(如果我按下UC上的鼠標按鈕,但不是它的組成TextBox或RadioButton控件,然後UC MouseDown事件被觸發)

我需要的:

我需要構成控件拖放和拖放不論鼠標按鈕是否被按下(釋放)工作或沒有

+1

試圖再現Winf的行爲Orms設計師並不完全簡單。看起來很明顯,但與事件的運作方式完全相反。如果用戶控件的鼠標事件沒有被解僱,這只是您遇到的第一個問題。當然,它不起作用,被點擊的控件會獲得該事件。從來沒有用戶控制。許多,還有更多。看看這篇雜誌的文章:http://msdn.microsoft.com/en-us/magazine/cc163634.aspx –

+0

看來,當我移動鼠標指針在用戶控件的組成控件,用戶控件的DragLeave事件是被解僱... – Prokurors

+0

看來,當我移動鼠標指針上的用戶控件的組成控件,用戶控件的DragLeave事件被觸發......當我改變組成控件屬性AllowDrop爲False我可以成功地刪除數據在用戶控件上,通過釋放鼠標UC組成控件上的按鈕,但我仍然無法在UC組件控件上按下鼠標按鈕來觸發MouseDown事件... – Prokurors

回答

0

我需要什麼做的是:

在用戶控制

1) - 在用戶控制使事件委託(MouseEventHandler,不事件處理程序)

public event MouseEventHandler eventName; //this one is accessible from container form 

2) - 寫構成控件的MouseDown事件的方法,其將導線構成的控制對在容器形式暴露事件​​

private void method_MouseDown(object sender, MouseEventArgs e) //attached to constituent control's MouseDown event 
    { 
      if (this.eventName!= null) this.eventName(this, e); 
    } 

3)事件,寫爲構成控制暴露事件(eventName的)

4)使用用戶控制的的DragDrop和dragEnter事件事件(不需要使用成分的方法控制各個事件)

5)構成控件的AllowDrop屬性附加傷害應該是假,否則就構成移動控制鼠標指針觸發用戶控制的DragLeave事件