How to access the file DropEffect in c# in order to tell cut from paste for a file DropList.
string[] fileList = iData.GetData(DataFormats.FileDrop) as string[];
Object objDropEffect = Clipboard.GetData("Preferred DropEffect"); //get drop effect that was put on keyboard
DragDropEffects dropEffect = DragDropEffects.Copy; //set default
int dropme = 0; //https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.dragdropeffects?view=netcore-3.1
if (objDropEffect.GetType() == typeof(MemoryStream)) //casting check
{
MemoryStream ms = new MemoryStream();
try
{
ms = (MemoryStream)objDropEffect; //cast should be safe now
dropme = ms.ReadByte(); //we read first byte of internal _buffer of this object objDropEffect which is 4 element byte array
dropEffect = (DragDropEffects)dropme; //cast into DragDropEffects enum CUT (Move) & PASTE (copy)
}
catch
{}
finally
{
ms.Dispose(); //we cannot use a using statement because of casting (MemoryStream)
}
}
StringCollection strcolFileList = new StringCollection();
strcolFileList.AddRange(fileList);
try
{
dataObj.SetFileDropList(strcolFileList);
dataObj.SetData("Preferred DropEffect", dropEffect); //
}
catch {}
//https://csharp.hotexamples.com/site/file?hash=0xe453aa34f981d998492adf71d35b84904e1c92052c44966d047a6e8da3c6a81e&fullName=Other/Altaxo/AltaxoSource-0.54.0.554/AltaxoSource/Libraries/ICSharpCode.TextEditor/Project/Src/TextAreaClipboardHandler.cs&project=xuchuansheng/GenXSource
// Work around ExternalException bug. (SD2-426)
// Best reproducable inside Virtual PC.
try
{
Clipboard.SetDataObject(dataObj);
}
catch (ExternalException)
{
Application.DoEvents();
try
{
Clipboard.SetDataObject(dataObj);
}
catch (ExternalException)
{
string error= "Drag'n Drop failed to be set.";
}
}
catch
{
string error = "Drag'n Drop failed to be set.";
}
No comments:
Post a Comment