簡體   English   中英

從Windows File Explorer拖放到Windows窗體上不起作用

[英]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操作相關的數據格式。 可以幫助我們縮小問題的根源。

我添加了arul提到的代碼,但仍然無法解決問題,但這讓我開始思考。

我開始認為這可能是Vista的問題,因此我將其發送給裝有Windows XP的朋友,並且效果很好! 然后,我嘗試在bin目錄中的Release文件夾之外運行它,您知道它起作用了嗎!

唯一不起作用的時間是我在Visual Studio 2008 IDE中運行它時……這很奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM