Drag and Drop
Using Drag and Drop from DicomViewer COM object, to another application, in .NET enviroment.
In order to enable drag and drop from a DicomViewer COM object, in .NET enviroment, Follow the following steps:
In the definition part of the dicom viewer (in the form "InitializeComponent" section), add the following line:
this.axDicomViewer1.MouseDownEvent += new AxDicomObjects.IDicomViewerEvents_MouseDownEventHandler(this.axDicomViewer1_MouseDown);
Then implement axDicomViewer1_MouseDown:
private void axDicomViewer1_MouseDown(object sender, IDicomViewerEvents_MouseDownEvent e)
{
if (((e.button& 1) != 0)) //left button clicked
{
Array arr = (Array)image.WriteArray(true,null,"100"); //convert the image to an array
byte [] ba = new byte[arr.LongLength];
arr.CopyTo(ba,0);
axDicomViewer1.DoDragDrop(ba, DragDropEffects.Copy); //send the array as the drag/drop object
}
}
Then, in the target application, in your drop target control, do:
this.TARGET_CONTROL.DragDrop += new System.Windows.Forms.DragEventHandler(dragdrop);
And implement the dragdrop method.
private void dragdrop(Object sender, DragEventArgs e)
{
try
{
DicomImage di;
IDataObject io = ((IDataObject)(e.Data));
DicomImages images = new DicomImages();
byte [] ba = (byte[]) io.GetData("System.Byte[]");
di = (DicomImage) images.ReadArray(ba);
if (di!=null)
{
//your DicomImage is now imported. you can now use it.
}
}
catch
{
//Handle expeptions here, usually when you drag something irrelevant to this code to your control.
}
}
Drag and Drop in .NET version of DicomObjects is lot simpler:
private void Viewer1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
DicomImage img = Viewer1.Images[0];
Viewer1.DoDragDrop(img, System.Windows.Forms.DragDropEffects.Copy);
}
}
private void Viewer2_DragDrop(object sender, DragEventArgs e)
{
System.Windows.Forms.IDataObject io = ((System.Windows.Forms.IDataObject)(e.Data));
Viewer2.Images.Add(io.GetData(typeof(DicomImage)) as DicomImage);
}
private void Form1_Load(object sender, EventArgs e)
{
Viewer1.Images.Read("DICOMImage_1");
}
private void Viewer2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetFormats().Contains("DicomObjects.DicomImage"))
e.Effect = DragDropEffects.Copy;
}
Reviewed: