从Windows文件资源管理器拖放到Windows窗体不起作用转到Windows窗体应用程序。当我拖动文本时它工作正常,但由于某种原因它无法识别该文件。这是我的测试代码:namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_DragDrop(objectsender,DragEventArgse){}privatevoidForm1_DragEnter(objectsender,DragEventArgse){if(e.Data.GetDataPresent(DataFormats.Text)){e.Effect=DragDropEffects.Copy;}elseif(e.Data.GetDataPresent(DataFormats.FileDrop)){e.Effect=DragDropEffects.Copy;}else{e.Effect=DragDropEffects.None;}}}}在Form1上,AllowDrop设置为true,正如我提到的,如果我将文本拖到窗体上而不是实际文件上,它就会起作用。我正在使用Vista64位...不确定这是否是问题的一部分。问题来自Vista的UAC。DevStudio以管理员身份运行,但Explorer以普通用户身份运行。这与非特权用户在将文件从资源管理器拖放到DevStudio托管应用程序时试图与特权用户通信相同。这是不允许的。当您在调试器之外运行应用程序时,这可能不会显示。除非您以管理员身份运行它(或者如果Vista自动将其检测为安装程序/安装应用程序)。您也可以以管理员身份运行资源管理器,至少用于测试。或禁用UAC(我不建议这样做,因为您真的想在开发期间而不是在部署期间发现这些问题!)您发布的代码应该可以工作。尝试将其放在DragEnter方法的开头stringformats=string.Join("n",e.Data.GetFormats(false));MessageBox.Show(格式);这将转储d''操作相关的数据格式。可能会帮助我们缩小问题所在的范围。我添加了arul提到的代码,但仍然无法正常工作,但这让我开始思考。我开始认为这可能是Vista的问题,所以我把它发给了一个使用WindowsXP的朋友,它运行得很好!然后我尝试在bin目录中的Release文件夹之外运行它,你知道它有效!唯一不起作用的是我在VisualStudio2008IDE中运行它……这很奇怪。您是否尝试过将STAThread属性添加到main方法?[STAThread]staticvoidMain(string[]args){}我和@mattruma有同样的问题,这意味着我没有拖放事件。将STAThread属性添加到main方法后,它按预期工作。以上是C#学习教程:从Windows文件资源管理器拖拽到Windows窗体不正常。分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
