Fragensteller
Problem bei Outlook 2010 Drag & Drop

Allgemeine Diskussion
-
Hallo zusammen,
Ich arbeite derzeit an einen Projekt wo ich aus Outlook 2010 E-Mails in ein UserControl ziehen will.
Die E-Mails werden dann umbenannt und im Hintergrund in einen Ordner kopiert. Das klappt auch alles wunderbar.
Nun zu meinen Problem:
Wenn ich in Outlook 2010 starte und Mails durch klicke sie aber nicht markiere und dann eine Mail in mein UserControl rein ziehe kopiert er genau die ausgewählte E-Mail (Das soll er immer machen).
Nun klicke ich weiter in mein Outlook andere E-Mails an und ziehe wieder eine E-Mail in mein UserControl und auf einmal nimmer er alle E-Mails die ich angeklickt habe:(
Dazu kommt wenn ich dann eine E-Mail in Outlook öffne öffnen sich alle Mail die ich angeklickt hatte mit.
Ich habe Euch zu Veranschaulichung des Problems mal ein Video angefertigt wo man es gut erkennen kann.
Video Link -> http://www.youtube.com/watch?v=4LUFNM5uWhI
Mein Quellcode dazu:
private void listView1_DragDrop(object sender, DragEventArgs e) { Boolean vorhanden = false; Microsoft.Office.Interop.Outlook.Application oApp; oApp = new Microsoft.Office.Interop.Outlook.Application(); try { for (int i = 1; i <= oApp.ActiveExplorer().Selection.Count; i++) { Object temp = oApp.ActiveExplorer().Selection[i]; int j = 0; if (temp is Microsoft.Office.Interop.Outlook.MailItem) { Microsoft.Office.Interop.Outlook.MailItem mailItem = (temp as Microsoft.Office.Interop.Outlook.MailItem); for (; j < listView1.Items.Count; j++) { string datum = mailItem.ReceivedTime.ToString(); string absender = mailItem.SenderName; string betreff = mailItem.Subject; betreff = betreff.Replace("/", "_"); betreff = betreff.Replace("*", "_"); betreff = betreff.Replace("?", "_"); betreff = betreff.Replace("\"", "_"); betreff = betreff.Replace("\\", "_"); betreff = betreff.Replace("<", "_"); betreff = betreff.Replace(">", "_"); betreff = betreff.Replace("|", "_"); betreff = betreff.Replace(":", "."); if (listView1.Items[j].Text == datum & listView1.Items[j].SubItems[1].Text == absender & listView1.Items[j].SubItems[2].Text == betreff) { vorhanden = true; break; } else { vorhanden = false; } } if (!vorhanden) { string betreff = mailItem.Subject; string datum = mailItem.ReceivedTime.ToString(); string absender = mailItem.SenderName; betreff = betreff.Replace("/", "_"); betreff = betreff.Replace("*", "_"); betreff = betreff.Replace("?", "_"); betreff = betreff.Replace("\"", "_"); betreff = betreff.Replace("\\", "_"); betreff = betreff.Replace("<", "_"); betreff = betreff.Replace(">", "_"); betreff = betreff.Replace("|", "_"); betreff = betreff.Replace(":", "_"); listView1.Items.Add(datum); listView1.Items[j].SubItems.Add(mailItem.SenderName); listView1.Items[j].SubItems.Add(betreff); //Sonderzeichen umbenennen da Windows keine Dateien mit diesen Zeichen erstellen kann datum = datum.Replace(".", "-"); datum = datum.Replace(":", "."); absender = absender.Replace("/", "#"); string file = AppGlobal.ServerDirectory + projektname + ordner + datum + " " + absender + " " + betreff + ".msg"; mailItem.SaveAs(file); mailItem = null; } temp = null; } } } catch (Exception ex) { MessageBox.Show(ex.Message, AppGlobal.ErrorTitle, MessageBoxButtons.OK); } oApp = null; }
- Typ geändert Robert BreitenhoferModerator Donnerstag, 19. Mai 2011 15:37 Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
Alle Antworten
-
Hallo B.,
vom Code der hier sichtbar ist, ist das (halbwegs) in Ordnung, was Du implementiert hast.
Gut, ich würde es wohl unabhängiger vom den Outlook Interop Klassen implementieren (etwa [so]), aber es muss Ereignisse oder Code geben, der (in Deinem Projekt vorhanden - hier nicht sichtbar) die Mehrfach-Selektion veranlasst.
Prüfe im Debugger, wann "oApp.ActiveExplorer().Selection.Count" > 1 wird.
ciao Frank -
Hallo Frank,
Habe nach der Installation von Office Professional 2010 Plus mit Outlook 2010 den gleichen Fehler festgestellt.
So wie es aussieht, selektiert Outlook zeitweise (nicht immer) - beim herumlicken von einem Mail zum andern -
intern mit. Auch wenn nur ein Mail angeklickt ist.
Das dies von Outlook herkommt siehst Du auch damit, dass wenn Du dann eben dieses eine angeklickte Mail
mit einem Doppelklick öffnen willst, eine Meldung kommt wie:
"Diese Aktion wird auf alle Elemente in den ausgewählten Gruppen angewendet werden."
Das heisst, das Outlook eben diese Selektion von Mails (wo keine ist!) anzeigen will.
Ein BUG?
Gruss Robert
-
Hallo Robert (und vielleicht B.),
für die anderen darf man ja kurz erwähnen, dass Du auch bereits Erfahrung mit diesem Thema hast - siehe [dieser Thread].
Ich denke "bisher" noch nicht, dass da ein Bug seitens MS vorliegt - vielmehr sehe ich noch einige Fehler in B.'s Code, obwohl er von der Essenz her das richtige Verfahren verwendet.Ich habe Dir (Euch) mal ein Beispiel-Projekt gemacht. Das ist dann allerdings .NET 4.0 / Office 2010 / -> Type-Embedding.
Hier der Download des Beispiel-Projektes: http://Dzaebel.NET/Downloads/WinOutlookDragDrop.zip
Funktioniert es da bei Euch? Bei mir tut es das [Outlook 2010 Version: 14.0.5128.5000 (32-Bit)]
ciao Frank -
Guten Tag der Bug ist bei mir Trotzdem noch vorhanden. 64 Bit Version Windows aber die gleich Outlook Version aber trotzdem den Bug vorhanden... Beim ersten Drag & Drop geht es aber beim 2 dann nicht mehr da kommen dann alle angeklickten E-Mails mit
-
Hallo M.,
- Hast du das auch wie im Video gemacht?
ja, natürlich. Funktioniert auf meinen Rechnern immer richtig auf 32 wie auf 64 Bit.
Also früher gab es solche Probleme definitiv (ist in Microsoft Connect mehrfach zu finden), aber mit den neusten Update der Produkte (Framework/Outlook etc.) ist das für mich (zumindest) nicht reproduzierbar.
ciao Frank -
Hatte genau das Problem auch mal. Es gibt dazu auch schon einen Eintrag bei Microsoft Connect, allerdings finde ich den Link gerade nicht.
Das ist jedenfalls ein Bug von Outlook.
Der Workaround war, dass man den Code, welcher im DragDrop-Event ausgeführt wird, in eine gesonderte Methode auslagert, und diese dann asynchron aufruft, also z.B. mit BeginInvoke.
Hatte bei mir dann wunderbar funktioniert.
Gruß
Daniel
-
Hallo Daniel,
War es vielleicht dieser Eintrag?In VSTO 4.0 and Outlook, the Count property of Selection object is not alway 1, when I click a message every time:
http://connect.microsoft.com/VisualStudio/feedback/details/543193/in-vsto-4-0-and-outlook-the-count-property-of-selection-object-is-not-alway-1-when-i-click-a-message-every-timeForum-Link (mit dem von Dir gefundenen Workaround): Outlook 2010 addin selection not clearing
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/d85e5e73-cbc1-4d83-93c5-9e86e1d86baa
Interop.Outlook.Explorer freeze after use
http://social.msdn.microsoft.com/Forums/en-US/outlookdev/thread/ad331c33-887b-45a3-b819-f2075222f83f/(Nur am Rande: Den vermutlichen Bug konnte auch ich nachvollziehen.)
Gruß
Marcel
-
Hallo @all
Ich habe exakt das selbe Problem. Das Problem fängt aber schon früher an.
Ich habe ein neues Projekt gemacht, darin habe ich ein Formular mit einem Panel drauf, AllowDrop = true auf dem Panel. Ein Verweiss auf die Microsoft.Office.Interop.Outlook. Im DragEnter Event wird lediglich der e.Effect auf Copy gesetzt (sonst kein Code). Der DragDrop Event ist auch leer (kein Code).
Wenn ich jetzt ein Mail auf das Panel ziehe und nachher in OL zurückgehe, kann ich zwar ein anderes Mail auswählen, beim öffnen werden dann aber mehrere Mails geöffnet oder die Markierung springt zurück auf das Mail welches auf das Panel gezogen wurde. Wenn ich dann einen anderen Ordner wähle und wieder zurück zur Inbox gehe, funktioniert OL wieder normal.
Das heisst allein das setzen des e.Effect auf Copy beim DragEnter reicht um das Problem mit OL zu haben.
Wenn ich einen Button auf das Form setzte und dort dann das selektierte Mail irgendwo hin speichere, funktioniert alles wunderbar. Es muss also irgendwas mit dem D&D zu tun haben.Hat jemand eine Idee was ich prüfen könnte?
Vielen Dank
Gruss Rinaldo
@Frank
Auch mit deinem Beispiel habe ich das beschriebene Problem
Bei mir tritt der Fehler bei der OL 32bit auf Windows 7 32bit sowie bei OL 64bit mit Windows 7 64bit auf! -
Trotz BeginInvoke scheint es noch nicht ganz flüssig zu laufen!
Nachfolgend ein Video und der Quelltext:
http://www.youtube.com/watch?v=TLsF9XiNO1c
private void TreeViews_DragDrop(object sender, DragEventArgs e) { FolderTreeNode dragNode = ((sender as TreeView).SelectedNode as FolderTreeNode); if (dragNode.FolderType == FolderTreeNode.FolderTypeEnum.Subfolder || dragNode.FolderType == FolderTreeNode.FolderTypeEnum.Primary) { ExchangeController.BaseType baseType; if ((sender as TreeView).Name == "treMailbox") baseType = ExchangeController.BaseType.Mailbox; else baseType = ExchangeController.BaseType.PublicFolder; if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) BeginInvoke(new ExecFiling(ExchangeControl.CopyDropableItem), dragNode.EntryId, dragNode.StoreId, baseType); //ExchangeControl.CopyDropableItem(myNode.EntryId, myNode.StoreId, baseType); else if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move) BeginInvoke(new ExecFiling(ExchangeControl.MoveDropableItem), dragNode.EntryId, dragNode.StoreId, baseType); //ExchangeControl.MoveDropableItem(myNode.EntryId, myNode.StoreId, baseType); } else { MessageBox.Show("This folder type is not supported", "Not supported", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
- Bearbeitet Ole K Montag, 30. Mai 2011 08:44 link ist link
-
Hab ich auch schon versucht...
Das witzig es geschieht ja im grund schon vor dem Drop Event.
Eben wenn ich
Also:
1. DragEnter event feuert.
2. Dann von mir aus aus DragOver
dann gehe ich mit der maus raus z.b. wieder zurück zur Liste
3. DragLeave wird gefeuert.
Sobald ich dann versuche ein anderes Item zu selektieren und zu öffnen, bekomme ich die Meldung: "This action will apply to all items in the selected groups".
Ergo, sind andere unsichbare items selektiert.. Ich habe auch schon bei Drag Leave versucht oActiveExplorer.ClearSelection und RemoveSelcteItem und anschließen AddToSelection... Kein Erfolg...
Zusatz: Ich hab sogar schon versucht den DragEnter event asyncron auszuführen.
-
Hier weitere infos:
http://www.add-in-express.com/forum/read.php?PAGEN_1=1&FID=5&TID=7932#nav_starthttp://www.add-in-express.com/forum/read.php?SHOWALL_1=1&FID=5&TID=7450#nav_start
Dort wird auch ein workaround angeboten. Allerdings bin ich mir nicht sicher ob dieser funktioniert.
Übrigens gibt es noch einen weiteren MS forum thread (allerdings in englisch):
http://social.msdn.microsoft.com/Forums/en-US/outlookdev/thread/ad331c33-887b-45a3-b819-f2075222f83f
-
MS hat mir in meinen Supportcase geantwortet und Berichtet das sie auf die MailItems ein sog. "lock" aufsetzen in outlook 2010. Dieser lock ist notwendig, da irgendetwas mit den View nicht funktioniert hat. Wie auch immer....
Traurig ist es auf jeden fall.
Wer mehr wissen will kann mich ja kontaktieren. Hänge da schon ein halbes Jahr dran.
-
Hallo Ole,
Wissen ist besser als nicht wissen, auch wenn's leider Dein Problem nicht löst. Ich denke, dass die Community insgesamt davon profitieren würde, wenn Du die Antwort von Microsoft oder zumindest Teile davon hier posten würdest (sofern möglich). Da wüßte man zumindest bei der nächsten Support-Anforderung worauf man sich konkret beziehen soll. Vielleicht hat der eine oder andere auch eine Idee zu einem Workaround? Wer weiß das schon. Zumindest poste hier eine E-Mail-Adresse bitte, oder einen Hinweis darauf, wie Du kontaktiert werden möchtest. Mich persönlich interessiert das Thema (marcel.roma[at]acm.org).
Gruß
Marcel
-
Hallo Ole,
- "lock" aufsetzen in outlook 2010
wie ist denn der genaue Wortlaut?
Speziell wäre es ja interessant, weil es ja in einigen Szenarien funktioniert.
Was Deine Email betrifft, so wäre für mich höchstens "Ole Koeckemann" von BBC Chartering Leer am nächsten "dran" (insofern hätten wir ja Deine Email), das müsstest Du dann aber ggf. bestätigen und IMHO ist es besser, wenn wir den Wortlaut hier veröffentlichen - falls das geht.
Falls es hier nicht öffentlich geht, kontaktiere mich ggf. unter FrankAddDzaebel.NET
ciao Frank -
Vielleicht hilft der letzte Post von "Jens Weber Christensen" hier:
http://social.msdn.microsoft.com/Forums/en-AU/outlookdev/thread/ad331c33-887b-45a3-b819-f2075222f83f