[英]Drag and drop from Windows File Explorer onto a Windows Form is not working
我在將文件從Windows資源管理器拖到Windows窗體應用程序時遇到問題。
當我拖動文本時,它可以正常工作,但是由於某種原因,它無法識別文件。 這是我的測試代碼:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Copy;
}
else if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
}
}
如我所提到的,在Form1上,AllowDrop設置為true,並且如果我將文本拖到表單上(而不是實際文件中),則它可以工作。
我正在使用64位Vista ... ...不確定這是否是問題的一部分。
問題出在Vista的UAC上 。 DevStudio以管理員身份運行,而資源管理器以常規用戶身份運行。 當您將文件從資源管理器中拖放到DevStudio托管的應用程序上時,這與試圖與特權用戶進行通信的非特權用戶相同。 這不被允許。
在調試器外部運行應用程序時,可能不會顯示此信息。 除非您在那里以管理員身份運行它(或者Vista是否自動檢測到它是安裝程序/設置應用程序)。
您也可以以管理員身份運行Explorer ,至少用於測試。 或禁用UAC(我不建議這樣做,因為您確實想在開發過程中而不是在部署過程中捕獲這些問題!)
您是否嘗試將STAThread
屬性添加到main方法中?
[STAThread]
static void Main(string[] args)
{
}
我和@mattruma有相同的問題,這意味着我沒有拖放事件。 將STAThread
屬性添加到main方法后,它按預期工作。
您發布的代碼應該可以工作。
嘗試將其放在DragEnter方法的開頭
string formats = string.Join( "\n", e.Data.GetFormats(false) );
MessageBox.Show( formats );
它將轉儲與d'n'd操作相關的數據格式。 可以幫助我們縮小問題的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.