C# 从工具栏实现拖放功能

3

我正在寻找一种方法,在 DragDrop 事件发生后确定在 toolStrip 中拖动的是哪个项目,我想做的就是使用不同的 case 语句为 toolstrip 中的每个项目编写不同的情况,但似乎找不到比较它们的方法。

更新:简短的代码示例

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..)
}

希望更容易理解我正在尝试做的事情。


你尝试过什么?http://mattgemmell.com/2008/12/08/what-have-you-tried/ - Soner Gönül
你不能对 UI 控件等引用类型使用 switch 语句。你必须使用 if/else if/else 语句。如果你提供一些处理程序代码以及 UI 定义的位置(.designer 文件),我们可以提供更多帮助。 - Paul Sasik
没想到需要代码示例,因为它只是一个带有2个按钮和空面板的工具栏而已。我想要的是在从工具栏拖动某物到面板时引发拖放事件,然后确定拖动的是工具栏中的哪个项目,现在只有2个按钮,但我可以假设有一种方法来比较工具栏中按钮的文本,并且我想要类似于每个按钮的开关(或者只有一对if,如果需要的话)。 - Jacco
@Jacco:提供一份代码示例可以避免我在项目中重新创建您的情况,这是我不想做的。请在您的面板中创建一个OnDrop处理程序并编写一些代码,即使它很糟糕,也要表明您的意图。拜托了。 - Paul Sasik
已更新问题,希望更容易理解。 - Jacco
1个回答

3

您提供的示例事件似乎不是正确的事件。

这里有一个工作中的示例,来自一个包含2个ToolStripButton的ToolStrip:

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");
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接