Search code examples
c#drag-and-droptoolstrip

C# DragDrop from toolStrip


I'm looking for a way to determine which item in a toolStrip that was dragged after a DragDrop event has occured, all I want to do is make a switch case with different cases for each item in the toolstrip but I cant seem to find a way of comparing them.

UPDATE: SHORT CODESAMPLE

private void toolStrip1_DragDrop(object sender, DragEventArgs e)
{
    //Here I want something like a DoDragDrop() and send the specific item from the
    //toolstrip..
}

private void panel1_MouseUp(object sender, MouseEventArgs e)
{
    //And here some way to determine which of the items was dragged 
    //(I'm not completely sure if I need a mouseUp event though..)
}

Hopefully a bit easier to get what I'm trying to do.


Solution

  • The events in your example don't look like the correct events to use.

    Here is a working example from a ToolStrip that has 2 ToolStripButtons on it:

    public Form1() {
      InitializeComponent();
      toolStripButton1.MouseDown += toolStripButton_MouseDown;
      toolStripButton2.MouseDown += toolStripButton_MouseDown;
    
      panel1.DragEnter += panel1_DragEnter;
      panel1.DragDrop += panel1_DragDrop;
    }
    
    void toolStripButton_MouseDown(object sender, MouseEventArgs e) {
      this.DoDragDrop(sender, DragDropEffects.Copy);
    }
    
    void panel1_DragEnter(object sender, DragEventArgs e) {
      e.Effect = DragDropEffects.Copy;
    }
    
    void panel1_DragDrop(object sender, DragEventArgs e) {
      ToolStripButton button = e.Data.GetData(typeof(ToolStripButton))
                               as ToolStripButton;
      if (button != null) {
        if (button.Equals(toolStripButton1)) {
          MessageBox.Show("Dragged and dropped Button 1");
        } else if (button.Equals(toolStripButton2)) {
          MessageBox.Show("Dragged and dropped Button 2");
        }
      }
    }