Note that there are some explanatory texts on larger screens.

plurals
  1. POWinForms Interop, Drag & Drop from WinForms -> WPF
    primarykey
    data
    text
    <p>I'm trying to drag data from the Winforms portion of my application on a WPF controls that's contained inside an "ElementHost". And it crashes when I try doing so.</p> <p>Trying the same thing but from Winforms to Winforms works fine. (See example code below)</p> <p>I need help on making this work... have any clues what I'm doing wrong?</p> <p>Thanks!</p> <hr> <p>Example:<br> In the sample code below, I'm just trying to drag a custom MyContainerClass object created when initating the drag on the label control on a 1) System.Windows.Forms.TextBox (Winforms) and 2) System.Windows.TextBox (WPF, added to an ElementHost). </p> <p>Case 1) works fine but case 2) is crashing when trying to retrieve the drop data using GetData(). GetDataPresent("WindowsFormsApplication1.MyContainerClass") returns "true" so In theory, I should be able to retrive my drop data of that type like in Winforms. </p> <p>Here is the stack trace of the crash: </p> <pre> "Error HRESULT E_FAIL has been returned from a call to a COM component" with the following stack trace: at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Windows.Forms.DataObject.GetDataIntoOleStructs(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetDataHere(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert) at System.Windows.DataObject.GetData(String format, Boolean autoConvert) at System.Windows.DataObject.GetData(String format) at WindowsFormsApplication1.Form1.textBox_PreviewDragEnter(Object sender, DragEventArgs e) in WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 48 </pre> <p>Here is some code:</p> <pre><code>// -- Add an ElementHost to your form -- // -- Add a label to your form -- public partial class Form1 : Form { public Form1() { InitializeComponent(); System.Windows.Controls.TextBox textBox = new System.Windows.Controls.TextBox(); textBox.Text = "WPF TextBox"; textBox.AllowDrop = true; elementHost2.Child = textBox; textBox.PreviewDragEnter += new System.Windows.DragEventHandler(textBox_PreviewDragEnter); System.Windows.Forms.TextBox wfTextBox = new System.Windows.Forms.TextBox(); wfTextBox.Text = "Winforms TextBox"; wfTextBox.AllowDrop = true; wfTextBox.DragEnter += new DragEventHandler(wfTextBox_DragEnter); Controls.Add(wfTextBox); } void wfTextBox_DragEnter(object sender, DragEventArgs e) { bool dataPresent = e.Data.GetDataPresent("WindowsFormsApplication1.MyContainerClass"); // NO CRASH here! object data = e.Data.GetData("WindowsFormsApplication1.MyContainerClass"); } void textBox_PreviewDragEnter(object sender, System.Windows.DragEventArgs e) { bool dataPresent = e.Data.GetDataPresent("WindowsFormsApplication1.MyContainerClass"); // Crash appens here!! // {"Error HRESULT E_FAIL has been returned from a call to a COM component."} object data = e.Data.GetData("WindowsFormsApplication1.MyContainerClass"); } private void label1_MouseDown(object sender, MouseEventArgs e) { label1.DoDragDrop(new MyContainerClass(label1.Text), DragDropEffects.Copy); } } public class MyContainerClass { public object Data { get; set; } public MyContainerClass(object data) { Data = data; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload