c#从我的自定义应用程序拖放到记事本

c#从我的自定义应用程序拖放到记事本,c#,drag-and-drop,C#,Drag And Drop,我有一个自定义应用程序,需要支持拖放。 在我的应用程序中拖动网格时,在DoDragDrop方法中,我以序列化格式提供了要删除的对象 当拖放到我的一个应用程序时,它能够反序列化字符串并创建对象 我想做的是允许源应用程序也能进入记事本/文本板。我可以看到我可以将文件从windows资源管理器拖放到记事本,但无法将纯文本拖放到记事本。猜测它检查DragEnter事件中的数据格式,dis允许字符串,但允许将文件放入其中 是否有办法更改源应用程序中的yr格式,以便它提供临时文件/字符串 是否可以提供两种

我有一个自定义应用程序,需要支持拖放。 在我的应用程序中拖动网格时,在DoDragDrop方法中,我以序列化格式提供了要删除的对象

当拖放到我的一个应用程序时,它能够反序列化字符串并创建对象

我想做的是允许源应用程序也能进入记事本/文本板。我可以看到我可以将文件从windows资源管理器拖放到记事本,但无法将纯文本拖放到记事本。猜测它检查DragEnter事件中的数据格式,dis允许字符串,但允许将文件放入其中

  • 是否有办法更改源应用程序中的yr格式,以便它提供临时文件/字符串
  • 是否可以提供两种格式的数据,以便目标drop可以接受它喜欢的任何格式
提前谢谢

见:

以多种格式存储数据

对于此特定代码段:

DataObject dataObject = new DataObject();
string sourceData = "Some string data to store...";

// Encode the source string into Unicode byte arrays.
byte[] unicodeText = Encoding.Unicode.GetBytes(sourceData); // UTF-16
byte[] utf8Text = Encoding.UTF8.GetBytes(sourceData);
byte[] utf32Text = Encoding.UTF32.GetBytes(sourceData);

// The DataFormats class does not provide data format fields for denoting
// UTF-32 and UTF-8, which are seldom used in practice; the following strings 
// will be used to identify these "custom" data formats.
string utf32DataFormat = "UTF-32";
string utf8DataFormat  = "UTF-8";

// Store the text in the data object, letting the data object choose
// the data format (which will be DataFormats.Text in this case).
dataObject.SetData(sourceData);
// Store the Unicode text in the data object.  Text data can be automatically
// converted to Unicode (UTF-16 / UCS-2) format on extraction from the data object; 
// Therefore, explicitly converting the source text to Unicode is generally unnecessary, and
// is done here as an exercise only.
dataObject.SetData(DataFormats.UnicodeText, unicodeText);
// Store the UTF-8 text in the data object...
dataObject.SetData(utf8DataFormat, utf8Text);
// Store the UTF-32 text in the data object...
dataObject.SetData(utf32DataFormat, utf32Text);

您可以将多种格式的数据添加到传递到DoDragDrop调用的DataObject中,因此只需添加另一个对SetData的调用即可添加新格式。这是最合适的实现,这样Drop目标可以查询可用的格式并选择它最喜欢的格式

 DataObject d = new DataObject();
 d.SetData(DataFormats.Serializable, myObject);
 d.SetData(DataFormats.Text, myObject.ToString());
 myForm.DoDragDrop(d, DragDropEffects.Copy);