尝试使用PictureBoxes创建拖放-事件;t触发器
本文关键字:事件 触发器 拖放 创建 PictureBoxes | 更新日期: 2023-09-27 18:16:53
编辑1/分辨率:
好吧,我找到了丢失的东西。我没有设置任何事件处理程序。现在它与以下一起工作
public Form1()
{
InitializeComponent();
pictureBox1.DragEnter += new DragEventHandler(pictureBox1_DragEnter);
pictureBox1.DragDrop += new DragEventHandler(pictureBox1_DragDrop);
}
所以我的下一个问题是……为什么我必须设置这些?像ButtonClick这样的东西知道该去哪里。。。那么,为什么其他事件不会呢?
我对C#还是有点陌生。
-
原始问题:
我正忙着把电脑里的图片拖放到图片框里。
我在VB中有一个工作版本。所以我只是(尽我所能(把它全部翻译成C#。
我的DragEnter事件根本没有触发。。。我不确定我错过了什么。
由于C#/VB的差异,我不得不更改一些内容,但它基本上是相同的代码。我觉得我错过了更多的活动或什么。。。我只是不知道是什么。
即使事实证明我有一些代码错误。。。我的程序甚至从未启动DragEnter。。。。如果我在该事件中放入一个伪调试行或MessageBox,只是为了看看它是否运行。。。。。它从来没有。
我的表单加载
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.AllowDrop = true;
pictureBox1.BorderStyle = BorderStyle.FixedSingle;
this.AllowDrop = true;
}
我的DragEnter
private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
string[] formats = e.Data.GetFormats();
if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
if (e.KeyState == CtrlMask && CtrlMask == CtrlMask)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
else if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else if (e.Data.GetDataPresent(DataFormats.Rtf))
{
if (e.KeyState == CtrlMask && CtrlMask == CtrlMask)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
}
还有我的DragDrop。。
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
pictureBox1.Image = bmp;
}
else if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files;
files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
string Newfile = file.ToLower();
string[] ImageTypes = { "gif", "jpg", "png", "bmp" };
string ActualFileExt = "";
foreach (string FileExtension in ImageTypes)
{
if (Newfile.EndsWith(FileExtension))
{
ActualFileExt = FileExtension;
}
}
if (ActualFileExt != "")
{
pictureBox1.Image = new Bitmap(Newfile);
}
}
}
else if (e.Data.GetDataPresent(DataFormats.Rtf))
{
}
}
您必须显式添加处理程序,因为在drop/ennter方法之后没有使用"Handles"关键字。请注意,此示例中的示例代码使用类似于按钮的Handles关键字。