簡體   English   中英

c#如何在DragDrop事件中檢測和處理.URL文件類型

[英]c# How to detect and process a .URL file type on DragDrop event

我已經做了很多研究,但是到目前為止還沒有結果。

我發現的唯一鏈接與我的情況有些相似,甚至都不起作用:

基本上 ,首先,我希望代碼能夠識別該文件的擴展名為“ .url ”,或者說是Internet快捷方式,通常由Google Chrome和Mozilla Firefox使用,並且最有可能,所有我未進行廣泛測試的其他網絡瀏覽器。

如果您不知道我指的是哪種類型的快捷方式,我的意思是下圖所示。

在此處輸入圖片說明

以下是我在文本框的DragDrop事件處理程序中使用的當前代碼,它似乎不起作用:

string file = (string)(e.Data.GetData(DataFormats.FileDrop, false));
if (Path.GetExtension(file) == ".url")
{
     //Do Stuff Here
}

顯然,該代碼甚至無法獲取快捷方式的假定文件名。 這種快捷方式是已經從瀏覽器拖放到桌面的一種。 因此,在這種情況下,該快捷方式就是為代碼處理而拖放的快捷方式。

(不知道這是否會有所不同,但是我嘗試用“ DataFormats.Serialization ”和“ DataFormats.Html ”替換“ DataFormats.FileDrop ”而沒有任何積極效果。)

同樣,由於某些奇怪的原因,程序立即在上面代碼塊的第一行中斷。 (這恰好是我的DragDrop事件的第一行)

我的問題是:如何對代碼進行更正或修改(即使在完全更改代碼的情況下,也可以在任何程度上進行修改或修改),以便它可以識別.url擴展名的Internet快捷方式文件,然后將其視為普通文件。

另外 ,為什么即使在第一行之后的幾行都設置了斷點(就像完全跳過if語句一樣),為什么在執行第一行之后立即立即停止執行代碼?

如果不是太多,如何只讓下面的行:

e.Effect = DragDropEffects.Link;

當文件在DragEnter事件處理程序中僅是Internet快捷方式類型“ .url ”時可以工作,還是那不可能?

我知道Notepad ++能夠打開和讀取內容,甚至可以編輯Internet快捷方式文件。 盡管我可以獲取識別快捷方式的代碼,但是我認為我將能夠像普通文件一樣從中讀取該快捷方式。

如果可能的話,我希望使用工作代碼作為答案。 很抱歉,我提出的問題很長,我想盡量准確地回答我的問題。

首先, DataFormats.FileDrop返回一個字符串數組,而不是一個簡單的字符串(因為可以同時拖動多個文件):

string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop));
if (files != null && files.Length > 0 && Path.GetExtension(files[0]) == ".url")
{
    //Do Stuff Here
}

效果:拖動時會影響光標圖標。 您應該將其設置為DragEnter / Over並簽入DragDrop。 如果將其設置為“無”,則不能刪除該項目。

private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop));
    if (files == null || files.Length == 0)
        e.Effect = DragDropEffects.None;
    else
        e.Effect = Path.GetExtension(files[0]) == ".url"
            ? DragDropEffects.Link
            : DragDropEffects.Copy;
}

更新: @taffer的答案解釋了為什么您的代碼表現異常

您可以使用下面的代碼,我已經對其進行了測試; 項目的行為與您描述的相同。

    private void textBox1_DragDrop(object sender, DragEventArgs e)
    {
        string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
        {
            if (Path.GetExtension(file[0]) == ".url")
            {
                //Do Stuff Here
                //
            }
        }
    }

    private void textBox1_DragEnter(object sender, DragEventArgs e)
    {
        string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);

        if (Path.GetExtension(file[0]) == ".url")
        {
            e.Effect = DragDropEffects.Link;
            //Do Stuff Here
        }

    }

關於第二個問題,請注意:可能引發了異常,請使用try catch進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM