Hy@all,
ich habe ein Problem mit Drag N Drop. Ich habe ein ganz simples Window, wo ich einen Dateipfad aus z.B. dem Explorer "hinein-drope" - das funktioniert auch prima, jedoch möchte ich, dass bei unerwünschte Drops (z.B. es wird ein Bild gedropt, Datei-Extension passt nicht) kein Drop-Cursor-Symbol angezeigt wird. Eigentlich dachte ich, dass das mit ...
e.Effects = DragDropEffects.None;
das eigentlich erledigt sein sollte, jedoch funktioniert das nicht wirklich.
Hier ist mein Code für die Drag N Drop Aktionen:
#region Drag N Drop
private void Window_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("FileName") || sender == e.Source)
{
e.Effects = DragDropEffects.None; // dieser Abschnitt wird in der runtime erreicht, jedoch zeigt das cursor-symbol an das gedropt werden kann, aber wieso??
}
}
private void Window_Drop(object sender, DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent("FileName"))
{
string[] filenames = e.Data.GetData("FileName") as string[];
if (filenames != null && filenames.Length > 0)
{
this.OFD.FileName = filenames[0];
Load(this.OFD.FileName);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error while drop: " + ex.Message, "Error");
}
}
#endregion
Mach ich hier irgendetwas falsch, ist e.Effects für etwas anderes gedacht?
MfG
Tonka
Konnte das Problem selbst lösen.
Statt dem DragEnter-Event muss das DragOver-Event benutzt werden. Außerdem muss man e.Handled auf true setzten.
private void Window_DragOver(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("FileName") || sender == e.Source)
{
e.Effects = DragDropEffects.None;
e.Handled = true;//WICHTIG!
}
}
private void Window_Drop(object sender, DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent("FileName"))
{
string[] filenames = e.Data.GetData("FileName") as string[];
if (filenames != null && filenames.Length > 0)
{
this.OFD.FileName = filenames[0];
Load(this.OFD.FileName);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error while drop: " + ex.Message, "Error");
}
}
MfG
Tonka