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;
            }
        }
    }
}

Visual Basic 或 C# 拖放图像源 URL

您链接的问题中的解决方案似乎仅适用于某些浏览器。在GetData中使用"FileContent"对我来说在Chrome中不起作用,但适用于Firefox。 DataFormats.Dib允许您直接使用位图,但不幸的是,Chrome似乎也不支持此功能。

指定DataFormats.Text似乎是一种可靠的跨浏览器解决方案,因为它返回了我测试过的所有浏览器的图像 URL。 DataFormats.UnicodeText可能会更好,但我没有测试它。

首先,将 AllowDrop 属性设置为true要响应拖放的任何控件。然后,将这些事件处理程序添加到DragEnterDragDrop事件:

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;
// ...