2009-11-20 37 views
3

我有一个需要支持拖放的自定义应用程序。 关于在我的应用程序中拖动网格,在其DoDragDrop方法中,我提供了要以序列化格式放入的对象。c#从我的自定义应用拖放到记事本

当放置到我的某个应用程序中时,它可以对字符串进行去音轨化并创建对象。

我想要做的就是让源应用程序也可以放入NotePad/TextPad中。我可以看到我可以将文件从Windows资源管理器拖放到记事本,但无法将纯文本拖放到NotePad。猜测它会检查DragEnter事件中的DataFormat并取消允许字符串,但允许将文件放入其中。

  • 是否有方法在源应用程序中更改yr格式,以便它提供临时文件/字符串。
  • 是否可以提供两种格式的数据,以便目标放置可以接受它满意的格式?

在此先感谢!

回答

5

您可以添加数据的多种格式的数据对象传递到DoDragDrop调用,所以只需向SetData添加另一个调用即可添加新格式。这是最合适的实现,通过这种方式,Drop目标可以查询可用的格式并选择它最喜欢的格式。

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

here

存储数据以多种格式

对于这个特殊的代码片段:

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);