none
Problem bei Outlook 2010 Drag & Drop RRS feed

  • 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.
    Dienstag, 5. April 2011 13:05

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
    Mittwoch, 6. April 2011 06:59
  • Hallo Frank,

    Ich rufe die Selektion nur an dieser stelle auf. In Debug wird die For-Schleife einmal durchlaufen und daher kann ich nicht sehen wann und wie da iwas gezählt wird :(

    LG

    buddy88

    Montag, 11. April 2011 08:52
  • Hallo,

    ich habe das eben nochmal bei Outlook 2003 ausprobiert und dort ist der Fehler nicht aufgetreten.

    Montag, 11. April 2011 12:24
  • 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

     

     

     

     

    Dienstag, 26. April 2011 14:30
  • 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
    Dienstag, 26. April 2011 19:55
  • 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
    Samstag, 30. April 2011 13:16
  • Hallo M.,

    Ich habe das gleich mal auf einem 64 Bit System [Outlook Version 14.0.5128.5000 (64-Bit)] ausprobiert, funktioniert aber auch da (auf 64 Bit) bei mir. Es muß also an anderen Komponenten (Versionen) liegen.

     


    ciao Frank
    Samstag, 30. April 2011 16:33
  • Hast du das auch wie im Video gemacht? also 2 mal irgendwelche email angeklickt und gedraggt? weil beim ersten mal läuft es bei mir auch aber wenn ich das wiederhole und alles an lasse dann nicht mehr...
    Sonntag, 1. Mai 2011 09:54
  • 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
    Sonntag, 1. Mai 2011 11:31
  • 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

    Montag, 2. Mai 2011 10:05
  • 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-time

    Forum-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





    Montag, 2. Mai 2011 10:11
    Moderator
  • 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!
    Dienstag, 3. Mai 2011 15:02
  • 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
    Montag, 30. Mai 2011 08:44
  • Versuche mal den kompletten Code, welchen du in TreeViews_DragDrop hast, in eine gesonderte Methode auszulagern, sodass in TreeViews_DragDrop nur eine BeginInvoke-Zeile steht.

    So hatte es bei mir funktioniert.

     

    Gruß

    Daniel

    Montag, 30. Mai 2011 08:52
  • 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.


    Montag, 30. Mai 2011 09:59
  • Hier weitere infos:

    http://www.add-in-express.com/forum/read.php?PAGEN_1=1&FID=5&TID=7932#nav_start

    http://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

     

     

    Mittwoch, 1. Juni 2011 11:23
  • 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.

    Freitag, 17. Juni 2011 12:48
  • 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



    Freitag, 17. Juni 2011 15:30
    Moderator
  • 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
    Freitag, 17. Juni 2011 15:48
  • 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

    Donnerstag, 12. Juli 2012 12:11