1. 程式人生 > >WinForm 控件拖拽筆記

WinForm 控件拖拽筆記

sci 方便 event and init rcu 文本 分享 事件

目前項目中,有個需求,需要將ListViewItem 項拖到一個 UserControl 中,方便在UserControl 中綁定 ListViewItem 內容。

現在問題是當拖拽經過 UserControl 內部 RichTextbox 時,會觸發 UserControl 的 DragLeave 事件 中斷拖拽,導致數據只能在非文本框區域才能拖拽成功。

現在解決思路時,在文本框中也設置拖拽功能,當鼠標經過 RichTextbox 時,綁定 DragEnter , DragDrop , 這兩個事件實現與 UserControl 拖拽事件 DragEnter , DragDrop 一致。

UserControl 如圖:

技術分享圖片

部份代碼:

  public EventHandler<DragEventArgs> OnDragEnterCuesom;
        public EventHandler<DragEventArgs> OnDragDropCuesom;

        public UserControlHex()
        {
            InitializeComponent();

            txtAsciiSelectContent.AllowDrop = true
; txtDetailHex.AllowDrop = true; txtAsciiSelectContent.DragEnter += TxtAsciiSelectContent_DragEnter; txtAsciiSelectContent.DragDrop += TxtAsciiSelectContent_DragDrop; txtDetailHex.DragEnter += TxtAsciiSelectContent_DragEnter; txtDetailHex.DragDrop
+= TxtAsciiSelectContent_DragDrop; } private void TxtAsciiSelectContent_DragDrop(object sender, DragEventArgs e) { if (OnDragDropCuesom != null) { OnDragDropCuesom(sender, e); } } private void TxtAsciiSelectContent_DragEnter(object sender, DragEventArgs e) { if (OnDragEnterCuesom != null) { OnDragEnterCuesom(sender, e); } }

註意: 文本框與UserControl 拖拽事件執行綁定同一代碼塊。

 userControlHex2.OnDragDropCuesom += userControlHex2_DragDrop;
 userControlHex2.OnDragEnterCuesom += userControlHex2_DragEnter;

技術分享圖片

WinForm 控件拖拽筆記