簡體   English   中英

拖放不適用於C#Winforms Application

[英]Drag and Drop not working in C# Winforms Application

我正在嘗試創建一個窗口表單,我可以刪除文件/文件夾。

我在WinForms應用程序中有以下代碼

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Debug.Print("DragEnter");
    }

    private void Form1_DragDrop(object sender, DragEventArgs e)
    {
        MessageBox.Show("Dropped!");
    }
}

我已將AllowDrop屬性設置為true。 我已經嘗試在Visual Studio中的調試中運行該應用程序。 基於其他類似問題的答案,我嘗試以管理員身份運行已編譯的exe。 我已經嘗試以管理員身份運行已編譯的exe。

但無論我做什么,我都無法觸發DragDrop事件。 但是,DragEnter事件觸發。 我錯過了什么?

你的DragDropEffect設置得恰當嗎? 嘗試將其放在DragEnter事件處理程序方法中:

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Console.WriteLine("DragEnter!");
        e.Effect = DragDropEffects.Copy;
    }

默認情況下,它設置為DragDropEffects.None因此Drop事件不會觸發。

對於那些讀這個的人,因為上面的提示不起作用。

請注意,如果您按照此處的報告運行Visual Studio或您的應用程序“以管理員身份”,則拖放將無效: https//visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag -and拖放到開放文件時運行的-AS-ADM

嘗試在Form1_DragEnter中使用這樣的東西:

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.All;
    else
    {
        String[] strGetFormats = e.Data.GetFormats();
        e.Effect = DragDropEffects.None;
    }
}

這會觸發你的Form1_DragDrop

不要忘記在表單的屬性中將AllowDrop更改為“True”您的代碼可能沒問題,但如果此屬性未啟用為true,則無效。 默認設置為false。

您是否編寫了要拖動的對象的MouseDown和MouseMove事件。

另一個非常討厭和棘手的問題可能是你已經覆蓋了OnHandleCreated ,但忘了調用基礎實現。 然后,您的應用程序無法設置所需的內部窗口設置以遵守AllowDrop屬性。

例如,確保在你的覆蓋中調用base.OnHandleCreated(e) ,你會沒事的。

盡管將AllowDrop設置為true,但我也遇到了這個令人困惑的問題!

在我的Windows窗體應用程序(VS2017)中,我必須確保設置了一個有效的Startup對象:例如myprojectname.Program,一切都很好!

暫無
暫無

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

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