Visual Basic 或 C# 拖放图像源 URL
本文关键字:图像 URL 拖放 Basic Visual | 更新日期: 2023-09-27 18:34:43
我想创建和编译一个小程序,允许某人从浏览器中运行,拖放图像。然后,我希望该程序选择此图像的源URL,并将其粘贴到文本框表单中。我需要这样做,因为我稍后将让程序使用 API 单击按钮将所述 URL 图像上传到 Imgur,但现在我正在寻找一种使用拖放来发挥我优势的方法。我也不知道使用 VB.net 还是 C# 更容易。
谁能给我任何线索,告诉我如何做到这一点?
这是我到目前为止所拥有的..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Imgur_Album_Upload
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
WireDragDrop(this.Controls);
}
private void WireDragDrop(Control.ControlCollection ctls)
{
foreach (Control ctl in ctls)
{
ctl.AllowDrop = true;
ctl.DragEnter += ctl_DragEnter;
ctl.DragDrop += ctl_DragDrop;
WireDragDrop(ctl.Controls);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void ctl_DragDrop(object sender, DragEventArgs e)
{
var textData = e.Data.GetData(DataFormats.Text) as string;
if (textData == null)
return;
messagebox.Text = textData;
// Validate the URL in textData here
}
private void ctl_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
}
}
您链接的问题中的解决方案似乎仅适用于某些浏览器。在GetData
中使用"FileContent"对我来说在Chrome中不起作用,但适用于Firefox。 DataFormats.Dib
允许您直接使用位图,但不幸的是,Chrome似乎也不支持此功能。
指定DataFormats.Text
似乎是一种可靠的跨浏览器解决方案,因为它返回了我测试过的所有浏览器的图像 URL。 DataFormats.UnicodeText
可能会更好,但我没有测试它。
首先,将 AllowDrop
属性设置为true
要响应拖放的任何控件。然后,将这些事件处理程序添加到DragEnter
和DragDrop
事件:
private void DragEnterHandler(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void DragDropHandler(object sender, DragEventArgs e)
{
var textData = e.Data.GetData(DataFormats.Text) as string;
if (textData == null)
return;
MessageBox.Show(textData);
// Validate the URL in textData here
}
Visual Studio的设计师可以为你做到这一点。或者,您可以自己添加处理程序,例如在窗体的构造函数中:
this.DragEnter += DragEnterHandler;
this.DragDrop += DragDropHandler;
// someControl.DragEnter += DragEnterHandler;
// ...