Je n'arrive pas à faire glisser une table html de mon application C# winforms dans une application externe (message Outlook) et à l'obtenir en tant que table au lieu d'une version en texte brut de cette table. Je sais que lorsque vous copiez/collez dans le presse-papiers, vous devez mettre la table dans CF_HTML format mais cela ne semble pas aider à faire glisser la table. Est-ce que quelqu'un sait ce que je manque?Glisser et déposer une table html dans une autre application
Répondre
ObjectListView prend en charge la copie et le déplacement des lignes d'un ListView vers d'autres applications, dans les versions texte et HTML. Pour ce faire, il fait quelque chose comme ceci:
DataObject dataObject = new DataObject();
this.CreateTextFormats(dataObject);
Clipboard.SetDataObject(dataObject);
Pour faire glisser-déposer, le code est pratiquement le même:
DataObject dataObject = new DataObject();
this.CreateTextFormats(dataObject);
DragDropEffects effect = this.DoDragDrop(dataObject, DragDropEffects.All);
CreateTextFormats() est pas compliqué:
public void CreateTextFormats(DataObject do) {
string textVersion;
string htmlVersion;
// Do the work of making the tab-separated text version and the HTML code
do.SetData(textVersion);
do.SetText(ConvertToHtmlFragment(htmlVersion), TextDataFormat.Html);
}
L'obtention du format HTML a pris plus de temps:
/// <summary>
/// Convert the fragment of HTML into the Clipboards HTML format.
/// </summary>
/// <remarks>The HTML format is found here http://msdn2.microsoft.com/en-us/library/aa767917.aspx
/// </remarks>
/// <param name="fragment">The HTML to put onto the clipboard. It must be valid HTML!</param>
/// <returns>A string that can be put onto the clipboard and will be recognized as HTML</returns>
private string ConvertToHtmlFragment(string fragment) {
// Minimal implementation of HTML clipboard format
string source = "http://www.codeproject.com/KB/list/ObjectListView.aspx";
const String MARKER_BLOCK =
"Version:1.0\r\n" +
"StartHTML:{0,8}\r\n" +
"EndHTML:{1,8}\r\n" +
"StartFragment:{2,8}\r\n" +
"EndFragment:{3,8}\r\n" +
"StartSelection:{2,8}\r\n" +
"EndSelection:{3,8}\r\n" +
"SourceURL:{4}\r\n" +
"{5}";
int prefixLength = String.Format(MARKER_BLOCK, 0, 0, 0, 0, source, "").Length;
const String DEFAULT_HTML_BODY =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">" +
"<HTML><HEAD></HEAD><BODY><!--StartFragment-->{0}<!--EndFragment--></BODY></HTML>";
string html = String.Format(DEFAULT_HTML_BODY, fragment);
int startFragment = prefixLength + html.IndexOf(fragment);
int endFragment = startFragment + fragment.Length;
return String.Format(MARKER_BLOCK, prefixLength, prefixLength + html.Length, startFragment, endFragment, source, html);
}
Exactement ce dont j'avais besoin, merci. – JohnMcCon
Génial, énorme aide, merci beaucoup! – yoyo
Bon exemple! Un ajout cependant: pour copier correctement les caractères spéciaux (par exemple Ä Ö Ü ä ö ü ß), j'ai ajouté cette ligne au début de la fonction ConvertToHtmlFragment: fragment = Encoding.Default.GetString (Encoding.UTF8.GetBytes (fragment)); (tiré de: http://msdn.microsoft.com/fr-fr/library/windows/desktop/ms649015(v=vs.85).aspx) –
Si vous n'avez pas besoin de formatage, copiez-le simplement dans le presse-papiers sous forme de texte délimité par des tabulations. De cette façon, il va coller comme une table dans Excel, et présumable la plupart des autres applications compatibles avec la table.
J'ai besoin de la mise en forme offerte par html pour que les tables délimitées ne soient pas une option. – JohnMcCon
- 1. Glisser/Déposer dans une application ET dans une autre application
- 2. Glisser et déposer une carte
- 3. Problème de glisser-déposer dans une application Windows C#
- 4. Glisser-déposer une image dans WPF
- 5. Glisser, déposer et supprimer
- 6. Comment glisser et déposer une ligne dans un JTable?
- 7. JQuery glisser et déposer
- 8. Glisser et déposer des éléments d'une liste à une autre dans une page ASP.NET?
- 9. Application glisser-déposer inter-applications dans Delphi
- 10. JQuery glisser et déposer
- 11. jquery glisser et déposer
- 12. jQuery Faire glisser d'une liste (sans supprimer d'élément) et déposer dans une autre liste
- 13. Détection d'une opération de glisser depuis une autre application
- 14. Glisser et déposer polyfill?
- 15. jquery glisser et déposer
- 16. glisser-déposer dans jquery
- 17. Flex imbriqués glisser et déposer
- 18. Glisser et déposer de la table intelligente WPF C#
- 19. Glisser-déposer dans MobileSafari?
- 20. Faites glisser et déposer dans winapi
- 21. Désactiver glisser/déposer dans QtWebkit
- 22. Glisser-déposer
- 23. Glisser et déposer des lignes de table en utilisant Javascript
- 24. Cocoa NSOutlineView et glisser-déposer
- 25. courriels glisser-déposer vers une bibliothèque SharePoint
- 26. Simulation par glisser-déposer?
- 27. glisser et déposer commande d'images
- 28. Comment faire glisser et déposer un e-mail, à partir d'Outlook, dans une application .NET?
- 29. Déplacer glisser et déposer dans une application de vue divisée iPad?
- 30. Flash glisser et déposer l'uploader?
Quelle table html dans Winforms? Voulez-vous dire webforms? – Kugel
Non, je génère le code html (sous la forme d'une chaîne) lorsqu'un utilisateur clique et fait glisser une grille dans mon application, puis l'envoie en tant que paramètre de données de la méthode .DoDragDrop. – JohnMcCon
Voulez-vous dire que lorsque vous copiez et collez cela fonctionne, mais le glisser-déposer ne fonctionne pas? – Chris