首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# WinForms 拖拽 Label 文本到 Panel:DoDragDrop 與 DragEnter/DragDrop 事件實現

     編輯:程式設計綜合問答

核心步驟

  1. Label 啟用拖拽:label.MouseDown += (s,e) => label.DoDragDrop(label.Text, DragDropEffects.Copy);
  2. Panel 接收拖拽:
    • panel.AllowDrop = true;
    • panel.DragEnter += (s,e) => { if(e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; };
    • panel.DragDrop += (s,e) => { string txt = (string)e.Data.GetData(DataFormats.Text); var lbl = new Label { Text = txt, AutoSize = true }; panel.Controls.Add(lbl); lbl.Location = panel.PointToClient(Cursor.Position); };
  3. 源 Label 置灰:label.ForeColor = Color.Gray;(在 DragDrop 完成後或 GiveFeedback 中)。

完整示例


public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        SetupDragDrop(label1, panel1);
        SetupDragDrop(label2, panel2);
        // ...
    }
    void SetupDragDrop(Label src, Panel target) {
        src.MouseDown += (s, e) => {
            if (e.Button == MouseButtons.Left)
                src.DoDragDrop(src.Text, DragDropEffects.Copy);
        };
        target.AllowDrop = true;
        target.DragEnter += (s, e) => {
            if (e.Data.GetDataPresent(DataFormats.Text))
                e.Effect = DragDropEffects.Copy;
        };
        target.DragDrop += (s, e) => {
            string txt = (string)e.Data.GetData(DataFormats.Text);
            var newLabel = new Label { Text = txt, AutoSize = true, ForeColor = Color.Black };
            target.Controls.Add(newLabel);
            newLabel.Location = target.PointToClient(Cursor.Position);
            src.ForeColor = Color.Gray; // 置灰
        };
    }
}

參考資源

詳細教程:C# WinForm 拖拽實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved