我在将文件从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是否自动检测到它是安装程序/设置应用程序)。

您也可以run explorer as an admin,至少用于测试。或禁用UAC(我不建议这样做,因为您确实想在开发过程中而不是在部署过程中捕获这些问题!)

关于c# - 从Windows File Explorer拖放到Windows窗体上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/281706/

10-17 02:46