我目前正在使用C#设计一个简单的WinForms UserControl,用户可以将Excel文件拖放到面板上,而不是浏览文件。我已经在技术上实现了这个功能,但它非常粗糙。
简而言之,我的代码目前看起来像这样,在面板上的DragEnter和DragDrop事件中(删除了错误处理):
我试图在拖动文件时显示Excel图标,但我只能得到这个东西:
。无论我在哪里搜索(主要是在此论坛上),都说如果想显示特定的图标,则需要实现自己的自定义光标,但我真的不相信这一点。我从不同公司的多个应用程序中截取了多个屏幕截图,所有应用程序都使用完全相同的控件(这只是其中的一个子集)。请注意,它们都不是光标,图标只是跟随光标移动:
Windows资源管理器:
Google Chrome:
Adobe Acrobat:
Microsoft Edge:
(相同的图标,但DragDropEffects可能设置为None)
因此,我的结论是必须有一个通用的Windows控件,但它在哪里?所有这些公司不可能巧合地构建完全相同的设计和功能!
任何帮助都将不胜感激!
附加问题:显然,在Windows 10中,您不被允许将文件拖放到以管理员身份运行的程序上,但是Chrome肯定可以做到这一点。您可以将Chrome作为管理员运行并将文件拖放到其中而没有任何问题。谷歌使用了什么魔法来绕过此安全功能?我想实现它,因为我的控件可能会在以管理员身份运行的程序中使用。
简而言之,我的代码目前看起来像这样,在面板上的DragEnter和DragDrop事件中(删除了错误处理):
private void dragPanel_DragEnter(object sender, DragEventArgs e)
{
var filenames = (string[])e.Data.GetData(DataFormats.FileDrop, false);
if (Path.GetExtension(filenames[0]) == ".xlsx") e.Effect = DragDropEffects.All;
else e.Effect = DragDropEffects.None;
}
private void dragPanel_DragDrop(object sender, DragEventArgs e)
{
var filenames = (string[])e.Data.GetData(DataFormats.FileDrop, false);
string filename = filenames[0];
// Do stuff
}
我试图在拖动文件时显示Excel图标,但我只能得到这个东西:
![enter image description here](https://istack.dev59.com/KHzLi.webp)
Windows资源管理器:
![enter image description here](https://istack.dev59.com/pLgna.webp)
![enter image description here](https://istack.dev59.com/43GUt.webp)
![enter image description here](https://istack.dev59.com/9H9Bu.webp)
![enter image description here](https://istack.dev59.com/7lmTW.webp)
任何帮助都将不胜感激!
附加问题:显然,在Windows 10中,您不被允许将文件拖放到以管理员身份运行的程序上,但是Chrome肯定可以做到这一点。您可以将Chrome作为管理员运行并将文件拖放到其中而没有任何问题。谷歌使用了什么魔法来绕过此安全功能?我想实现它,因为我的控件可能会在以管理员身份运行的程序中使用。