【问题标题】:Why not work drag and drop?为什么不工作拖放?
【发布时间】:2011-07-09 19:42:29
【问题描述】:

我需要从 window2.panel 中的 window1.listbox 拖放。

一个写:

public partial class Form1 : Form
{
    Routers r = new Routers();
    public Form1()
    {
        InitializeComponent();

        r.Show();

        panel1.DragOver += new DragEventHandler(panel1_DragOver);
        panel1.DragEnter += new DragEventHandler(panel1_DragEnter);
        panel1.MouseUp += new MouseEventHandler(panel1_MouseUp);
        panel1.DragDrop += new DragEventHandler(panel1_DragDrop);
        panel1.AllowDrop = true;

        this.AllowDrop = true;
        this.DragDrop += new DragEventHandler(Form1_DragDrop);
    }

    void Form1_DragDrop(object sender, DragEventArgs e)
    {
        throw new NotImplementedException();
    }

    void panel1_DragDrop(object sender, DragEventArgs e)
    {
        if (isDrop == false)
        {
            isDrop = true;
            Button b = new Button();
            b.Text = (string)e.Data.GetData(DataFormats.StringFormat);
            b.Location = new Point(e.X, e.Y);

            this.panel1.Controls.Add(b);
        }
    }

    void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        if (isDrop)
        {
            isDrop = false;
        }
    }
    bool isDrop = false;

    void panel1_DragEnter(object sender, DragEventArgs e)
    {
        isDrop = false;
        if (e.Data.GetDataPresent(DataFormats.StringFormat)) 
            e.Effect = DragDropEffects.None;
    }
    void panel1_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.None;
    }
}

写window2

   public partial class Routers : Form
    {
        public Routers()
        {
            InitializeComponent();

            this.listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown);
            this.listBox1.DragOver += new DragEventHandler(listBox1_DragOver);

        }


        private void listBox1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.listBox1.SelectedItem != null)
            {
                string item = this.listBox1.SelectedItem.ToString();
                this.listBox1.DoDragDrop(item, DragDropEffects.Move);
            }
        }


    }

DragDrop 事件不起作用。 并且拖动时不改变光标

【问题讨论】:

    标签: drag-and-drop c#-2.0


    【解决方案1】:

    拖动目标时,您需要将e.Effect 设置为None 以外的其他值。

    【讨论】:

    • 不,你不是。需要在DragOverDragEnter中设置效果。
    • @sim:处理DragOverDragEnter 并设置e.Effect。请参阅 MSDN 的示例。
    • 你需要阅读关于拖放机制的文档
    【解决方案2】:

    请参阅此主题以获取解决方案:

    DragDrop event not raised

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.All;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 2016-02-16
      • 2022-08-18
      • 2017-01-19
      • 2015-11-14
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多