2016-02-14 18 views
1

我想创建并编译一个小程序,允许某人从浏览器中运行,拖放图像。然后我想让这个程序挑出这个图像的源URL并将其粘贴到文本框中。我需要这样做,因为我稍后将使程序通过使用API​​单击按钮将上述URL图像上传到Imgur,但现在我正在寻找一种方法来使用拖放功能我的优势。我也不知道是否会更容易使用VB.net或C#。Visual Basic或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; 
      } 
     } 
    } 
} 
+0

在这种情况下,您需要浏览器本身的帮助。 –

+0

我已经做了很多研究,没有什么比较有效的,只是想知道是否有人有任何想法,因为我运气不佳 – user4191887

+0

我认为它会像剪贴板抓取一样工作很多,但这次是一个拖-drop – user4191887

回答

1

question you linked的解决方案似乎只与一些浏览器工作。使用GetData中的“FileContents”在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; 
// ... 
+0

你将如何做到这一点,所以你可以拖动图像上的任何地方的图像,它会进入它进入消息框?我认为这不足以要求您将其拖到消息框中。 – user4191887

+0

@ user4191887我希望[this](http://stackoverflow.com/a/17014821/996081)回答有帮助。 – cubrr

+0

我试过了,它仍然不起作用,当我将它拖到文本框中时,它只是打开一个对话框,其中包含图像url – user4191887