我想拖放一个文件,以便文本框显示完整的文件路径.我使用了拖动输入和拖放事件,但我发现它们没有进入事件.
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;
}
Run Code Online (Sandbox Code Playgroud)
谁能指出我做错了什么?
更新:如果程序设置为以提升的权限运行(vista/win 7),则不起作用
max*_*max 22
检查AllowDrop
文本框的属性 - 应将其设置为true
.此外,将拖放数据转换为以下string[]
情况DataFormats.FileDrop
,而不仅仅是string
:
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if(files != null && files.Length != 0)
{
serverURLField.Text = files[0];
}
Run Code Online (Sandbox Code Playgroud)
而且我认为你应该在你的拖动事件处理程序中交换代码 - 通常你会向用户显示拖放是可能的DragEnter
并执行实际操作DragDrop
.
Joa*_*lho 11
提升的特权不应该与它有任何关系.DragOver
除了DragDrop
Max回答之外,您还需要实现该事件.这是应该为DragDrop添加的代码:
private void textBoxFile_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
如果您正在使用 WPF 并且它仍然无法与此处的答案一起使用(这是我的情况),您需要使用
e.Handled = true;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如此处和此处PreviewDragEnter
所述(它们是同一篇文章,但以防万一发生故障)。
这是来自该来源的代码片段:
private void TextBox_PreviewDragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy;
e.Handled = true;
}
private void TextBox_PreviewDrop(object sender, DragEventArgs e)
{
object text = e.Data.GetData(DataFormats.FileDrop);
TextBox tb = sender as TextBox;
if (tb != null)
{
tb.Text = string.Format("{0}", ((string[])text)[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29005 次 |
最近记录: |