【发布时间】:2017-01-19 19:50:28
【问题描述】:
我正在使用 c# 3.5 / winforms
在我的表单上,我在一个面板中有 2 个图片框 PB1 和 PB2(以及许多其他控件)。 用户可以拖动 PB1 到 PB2。但他也可以通过在表单上或表单外的任意位置释放左键来取消放置。 PB1 可以拖动固定次数。当拖动开始时,我在 PB1 中减少一个变量,如果它达到 0,则 PB 变得不可见。
但是如果用户取消拖动,PB1必须知道要增加变量并设置PB1的可见性。
我的问题是:PB1 如何知道何时取消拖动(或实际上,丢弃,即使在有效控件上)?请记住,用户可以在表单之外释放拖动,因此我不能在表单上使用 Drop 事件。我尝试了 GiveFeedback 和 QueryContinueDrag 事件,但只要拖动继续,它们就会被触发,但停止时不会触发。
一些代码:
class COPGOJetonImage
{
private PictureBox PB1;
public COPGOJetonImage()
{
PB1 = new PictureBox();
//here I initialize PB1
((Control)PB1).AllowDrop = true; //in case of
PB1.MouseDown += OnMouseDown;
}
public void OnMouseDown(object sender, MouseEventArgs ev)
{
PB1.DoDragDrop(PB1.Image, DragDropEffects.Copy);
}
}
【问题讨论】:
-
"用户可以将 PB1 拖到 PB2。" PB2 是唯一有效的放置目标吗?如果唯一可以有效删除的位置是表单中的某个位置,那么在发生删除时减少变量可能更有意义。
-
DoDragDrop是返回由放置目标设置的结果效果的方法 -
实际上有1到4个有效目标。
-
哎呀!实际上,有 1 到 4 个有效目标。当用户拖动最后一个实例时,我需要更改 PB1 的外观。因此,如果用户落在一个有效目标上,PB1 将保持(视觉上)禁用状态。但是如果他掉到其他任何地方(在表单或其他窗口或桌面上),PB1 必须显示启用外观
标签: c# winforms drag-and-drop