我想拖放文件,以便文本框显示完整的文件路径。我使用了拖动输入和拖放事件,但我发现它们没有输入事件。
private void sslCertField_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
{
e.Effect = DragDropEffects.All;
}
}
private void sslCertField_DragEnter(object sender, DragEventArgs e)
{
string file = (string)e.Data.GetData(DataFormats.FileDrop);
serverURLField.Text = file;
}
有谁可以指出我做错了什么?
更新:如果将程序设置为使用提升的权限(vista / win 7)运行,则无效
答案 0 :(得分:21)
检查文本框的AllowDrop
属性 - 应将其设置为true
。
此外,如果是string[]
,请将拖放数据转换为DataFormats.FileDrop
,而不仅仅是string
:
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if(files != null && files.Length != 0)
{
serverURLField.Text = files[0];
}
我认为您应该在拖动事件处理程序中交换代码 - 通常您会向用户显示DragEnter
中的拖放功能并在DragDrop
上执行实际操作。
答案 1 :(得分:10)
提升的特权不应该与它有任何关系。除了Max回答的DragOver
之外,您还需要实施DragDrop
事件。这是应该为DragDrop添加的代码:
private void textBoxFile_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
答案 2 :(得分:5)
不要从visual studio运行它...运行.exe,它是在你构建解决方案后创建的。希望有帮助:)
答案 3 :(得分:4)
如果你正在使用WPF并且它仍然无法使用这里的答案(这是我的情况),你需要使用
e.Handled = true;
<{1}}事件中的,如here和here所述(它们是相同的文章,但万一有人失败)。
以下是来自该来源的代码段:
PreviewDragEnter
答案 4 :(得分:1)
如果您的visual studio在管理员权限下运行,则拖放功能似乎无效。
=&GT;运行没有管理员权限的visual studio,它将工作