【问题标题】:DragOver button not firing event c#DragOver按钮不触发事件c#
【发布时间】:2016-01-26 17:32:42
【问题描述】:

正如标题所示,我无法让 DragOver 事件正常运行。我在一个表单上有 100 多个按钮,我希望当一个图片框被拖到它们上面时它们的颜色会改变。我已设置所有按钮 AllowDrop = true 并在方法中包含以下代码。

private void ShipOver(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.None;
    Button b = (Button)sender;
    b.BackColor = Color.Green;
    label22.Text = "";
}

我不明白为什么这不起作用。我还有一个 DragLeave 方法,它只是将颜色更改为不同的颜色。

需要注意的一点是,我在按钮上拖动的项目比按钮本身大。不确定这是否会产生影响。

【问题讨论】:

  • 代码按发布的方式工作。您是否已安排好活动:button1.DragOver += ShipOver;
  • 我没有,这需要在哪里发生,因为我有 100 个按钮。我真的不想写 100 行代码。
  • 所有按钮是否都在同一个容器中,如表单或面板?如果是这样,您可以轻松循环该集合。
  • 是的。我需要在构造函数中连接事件吗?
  • 是的。如果您没有在例如 xaml 文件中完成,则必须遍历所有按钮并添加事件。

标签: c# drag-and-drop


【解决方案1】:

您需要将事件连接到您的方法。如果所有按钮都在一个面板中,您可以在表单的构造函数中执行以下操作:

foreach (Button b in panel1.Controls.OfType<Button>()) {
  b.DragOver += ShipOver;
}

同样的原则也适用于 DragLeave 事件。

【讨论】:

  • 刚刚尝试将所有内容都放入一个面板中(抱歉,我以为我使用了一个但没有使用),它阻止了拖放功能的工作。
  • @JOsh 你复制粘贴了吗?这将把控件的事件从他们的方法中分离出来。你对 PictureBox 控件做了什么吗?
  • 是的,我只是将其复制并粘贴到面板中。我在添加到面板时根本没有更改图片框控件。
  • @JOsh 您为那些通过设计器连接的控件所拥有的任何事件都必须再次连接。下次不要复制粘贴控件,只需将它们拖到新容器中即可。
  • 我现在已经设法让拖放工作(只需按下 control Z 并按照您的建议进行操作。但是它仍然不会显示不同的颜色。我尝试在调试和发布模式下运行并尝试将按钮移开,看看是否有效果,但似乎没有任何效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2020-06-19
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多