首页 文章

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

提问于
浏览
3

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

当丢弃到我的某个应用程序时,它可以取消选择字符串并创建对象 .

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

  • 有没有办法在源应用程序中更改yr格式,以便它提供临时文件/字符串 .

  • 是否可以提供2种格式的数据,以便目标丢弃可以接受它满意的任何格式?

提前致谢!

2 回答

  • 5

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

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

    here

    Storing Data in Multiple Formats

    对于此特定代码段:

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

相关问题