我的Windows窗体应用程序中有两个图片框。这些图片框中的每一个都有一个图像。 pictureBox1很小,只有122 x 52,而且pictureBox2要大得多(459 x 566)。我想要做的是能够将picturebox1的图像拖放到picturebox2上,并创建和保存新图像。无论x& y坐标我是否放置了pictureBox1的图像,它都会"标记"它就在pictureBox2中的那个位置。然后将修改并保存pictureBox2的图像。所以简单地通过拖放,用户应该能够“&"图片放到pictureBox2上很容易。这可能吗?
答案 0 :(得分:0)
如果使用拖放,您可以控制自己想要做的事情。通常,在控件的MouseDown事件中,您可以确定dragevent是否正在启动。我保留了一份表格财产。
private Point _mouseDownPoint;
我在MouseDown
期间从控件拖动中设置了它 protected override void OnMouseDown(MouseEventArgs e)
{
_mouseDownPoint = e.Location;
}
在同一控件的OnMouseMove事件中。此代码确保用户最有可能尝试拖动并开始拖放。此代码来自usercontrol,因此在您的情况下可能必须更改DoDragDrop中的内容。
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (e.Button != MouseButtons.Left) return;
var dx = e.X - _mouseDownPoint.X;
var dy = e.Y - _mouseDownPoint.Y;
if (Math.Abs(dx) > SystemInformation.DoubleClickSize.Width || Math.Abs(dy) > SystemInformation.DoubleClickSize.Height)
{
DoDragDrop(this, DragDropEffects.Move);
}
}
您可能收到丢弃的控件应该对其DragEnter事件进行编码。这里我们有一个DragEnter事件,它区分ToolStripButton和自定义UserControl DSDPicBox。没有编码DragEnter事件的控件将在拖动时显示noDrop图标。
private void Control_DragEnter(object sender, DragEventArgs e)
{
var button = e.Data.GetData(typeof(ToolStripButton)) as ToolStripButton;
if (button != null)
{
e.Effect = DragDropEffects.Copy;
return;
}
var element = e.Data.GetData(typeof(DSDPicBox)) as DSDPicBox;
if (element == null) return;
e.Effect = DragDropEffects.Move;
}
最后,你必须处理下降。 panelDropPoint是项目被删除的坐标。您可以使用它来将新图形放在旧图形中。如果要更改其大小,则必须以新分辨率渲染图片。
private void panel_DragDrop(object sender, DragEventArgs e)
{
// Test to see where we are dropping. Sender will be control on which you dropped
var panelDropPoint = sender.PointToClient(new Point(e.X, e.Y));
var panelItem = sender.GetChildAtPoint(panelDropPoint);
_insertionPoint = panelItem == null ? destination.Controls.Count : destination.Controls.GetChildIndex(panelItem, false);
var whodat = e.Data.GetData(typeof(ToolStripButton)) as ToolStripButton;
if (whodat != null)
{
//Dropping from a primitive button
_dropped = true;
whodat.PerformClick();
return;
}
}
我从代码中移除了一些只会使水变得混乱的项目。此代码可能无法开箱即用,但应该让您更近。
此致 马克