一定要先開啟文字框的拖放屬性this.txtPath.AllowDrop = true;
本來就是一個很簡單的問題,媽的,浪費我一個多小時。願意就是罪魁禍首就是win7的UAC許可權導致的。又是一個蛋疼的問題!
private void txtPath_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.All;
else
e.Effect = DragDropEffects.None;
}
private void txtPath_DragDrop(object sender, DragEventArgs e)
{
string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
if (s.Length > 0)
{
//指定html檔案類型。
if (System.IO.Path.GetExtension(s[0]).ToLower() == ".html")
{
txtPath.Text = s[0];
}
else
{
XtraMessageBox.Show("只支援拖放html格式的檔案", "訊息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
我的Visual Studio2012 是以管理員身份運行,導致Debug的時候應用程式也是以管理員身份啟動並執行,然後Win7系統在UAC的保護下,控制項的DragEnter/DragOver/DragDrop等事件統統都不被觸發。
從VISTA->WINDOWS7 UAC(使用者帳戶控制)出現到至今,拖放檔案一直存在一個問題:
“以管理員身份運行”的任何程式,均不能正常接受拖放進視窗中的檔案!
當我們的WinForm應用程式需要以管理員的身份運行時(比如,為了訪問windows註冊表),我們需要在程式清單(app.manifest檔案)中將UAC選項改為"requireAdministrator"(可以參考如何自動以管理員身份運行.NET程式?)。如此產生的exe的表徵圖在XP和Win2003下是沒有變化的,但是放到win7下面,你會發現表徵圖的右下角多了一個小盾牌。
如何解決Win7下這個拖拽的問題了?
解決辦法:一、應用程式不以管理員身份運行。或者visual studio也不要以管理員身份運行。
解決辦法二:超級無恥方法:UAC設定為0級就無問題了
UAC設定為0級就無問題了
如果有更好的方法,請留言!