【筆記】C#實現拖拽功能+MessageBox居父窗口中顯示


首先,這個拖拽功能是我今天早上突然想到的。我想我能不能做呢。事實上C#上實現確實很簡單。

拖出一個窗體。然后需要實現窗體的DragDrop和DragEnter方法。具體代碼如下

        private void Form1_DragDrop(object sender, DragEventArgs e)
{
string path = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); //檢索與指定的數據格式關聯的數據。
MsgBox.Show(path);
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{

if (e.Data.GetDataPresent(DataFormats.FileDrop)) //如果此實例中存儲的數據與指定的格式關聯,或者可以轉換成指定的格式,則為 true;否則為 false。
e.Effect = DragDropEffects.Link; //默認情況下,在此屬性中指定的效果將確定拖放操作目標的鼠標光標。 這可用來向用戶提供有關操作的反饋,該操作將在放下對應的對象時發生。
else e.Effect = DragDropEffects.None;
}
}

 

第一句話是得到拖拽事件e和filedrop相關的數據。返回為object,強制轉換成數組,然后取第一部分數據就可以了。第二句可能你已經注意到了。這個MessageBox了。他不是系統的。而是一個外來引用的。主要是系統的messagebox只能居於屏幕中間。我想讓他居於父窗體中間,簡單的方法可能是我不知道。其實可以使用獲取窗口位置然后繼承系統的MessageBox來實現一個自己的。我呢。直接去codeproject找個現成的。一會就說怎么導入。

第二個方法里面主要是實現當拖拽至窗體釋放后觸發的事件。判斷e里面的數據是不是FileDrop類型。然后設置鼠標為一個鏈接標志。否則為空

現在說Messagebox。這個messagebox支持各種定制的信息顯示。可以看看這個文章這個我已經提取到工程目錄了。如果你需要使用這個類,需要這樣做。我也是摸索的。。

1.打開你自己需要使用該messagebox的工程,然后在解決方案上如下圖所知點擊。

然后定位到DialogBox目錄。也就是我將要導入的。然后打開DialogBox.csproj然后解決方案視圖就有這個工程了

2.點擊主工程,也就是我這里的drop工程的引用

添加引用,然后再彈出的項目選項卡就能顯示出我們第一步的那個工程了

確定即可

3.最后一步,在Form1.cs也就是主工程的主文件里使用導入工程的命名空間using CodeProject.Dialog;

這個我是看了源碼看到的。CodeProject是作者定義的命名空間。

4.然后就可以像使用系統的MessageBox一樣使用這個了。不過這里是MsgBox.運行一下,就會發現消息框已經可以居中顯示在父窗體了。

 有錯誤希望博友們指教。。畢竟菜鳥一只。。

下載地址:Drop.7z


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM