gpt4 book ai didi

c# - 拖放移动错误的面板

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:49 25 4
gpt4 key购买 nike

我正在从事一个包含多个面板的项目。我在表单顶部有 6 个面板,在这些面板下面的 2 列中有 6 个面板。

我想将顶部面板中的图像拖放到其下方的面板中,反之亦然,以及在列之间。

但是,在我当前的代码中,我遇到了一个问题,它有时(请参阅下面的原因)会移动错误的面板。

如果我将一个图像从一个面板拖到一个新面板,并将鼠标悬停在一个已经包含图像的面板上,我最初拖动的图像将被我刚刚拖过的图像替换。

事件代码:

    private void panel_MouseDown(object sender, MouseEventArgs e)
{
//we will pass the data that user wants to drag DoDragDrop method is used for holding data
//DoDragDrop accepts two paramete first paramter is data(image,file,text etc) and second paramter
//specify either user wants to copy the data or move data
source = (Panel)sender;
DoDragDrop(source.BackgroundImage, DragDropEffects.Copy);

}


private void panel_DragEnter(object sender, DragEventArgs e)
{
//As we are interested in Image data only, we will check this as follows
if (e.Data.GetDataPresent(typeof(Bitmap)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}

private void panel_DragLeave(object sender, System.EventArgs e)
{
sourcePanel = (Panel)sender;
}

private void panel_DragDrop(object sender, DragEventArgs e)
{

//target control will accept data here
Panel destination = (Panel)sender;
destination.BackgroundImage = (Bitmap)e.Data.GetData(typeof(Bitmap));
sourcePanel.BackgroundImage = null;
}

最佳答案

我认为您希望在 MouseDown 事件中使用 sourcePanel,而不是 source,因为您再也不会在发布的代码中引用 source。当您将鼠标移入和移出面板时会触发 DragLeave,因此您不希望此时设置源面板。

void panel_MouseDown(object sender, MouseEventArgs e) {
sourcePanel = (Panel)sender;
DoDragDrop(sourcePanel.BackgroundImage, DragDropEffects.Copy);
}

并忽略 DragLeave 事件:

void panel_DragLeave(object sender, EventArgs e) {
//sourcePanel = (Panel)sender;
}

关于c# - 拖放移动错误的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com