none
Outlook friert ein nach Zugriff auf Explorer.CurrentView RRS feed

  • Frage

  • Moin moin,

    ich habe einen ToggleButton im Ribbon eingebaut, mit dem ich zwischen 2 Ansichten hin- und herschalten möchte.
    Damit dieser den richtigen Status (entsprechend der Ansicht) anzeigen kann, muss ich die aktuelle Ansicht abfragen.
    Tue ich dieses friert jedoch die Anzeige des Outlook ein sobald ich einen Ordner wechsel. Ich kann dann Outlook nur noch über den TaskManager beenden.

    Ich habe dazu folgenden Code versucht:

        Private Sub outExplorer_FolderSwitch() Handles outExplorer.FolderSwitch
            Dim cView As Outlook.View
    
            With _ribbonConnector
                cView = DirectCast(outApp.ActiveExplorer.CurrentView, Outlook.View)
                'MsgBox(cView.Name)
    
                'If cView = "unerledigt" Then
                If 1 = 1 Then
                    .mPressed = True '.IsPressed(outExplorer)
                Else
                    .mPressed = False
                End If
                .Ribbon.Invalidate()
            End With
        End Sub
    Kommentiere ich die Zeile mit 'cView = ...' aus, stürzt die Anwendung nicht ab, jedoch fehlt dem ToggleButton die Information, welche Ansicht in dem Ordner aktuell ist.

    Kennt jemand das Problem oder kann mir die richtigen Fragen stellen, um es zu lösen?

    Ich habe das früher in Outlook 2010 jahrelang im Einsatz gehabt und musste das AddIn nun unter VS2017 einmal komplett neu erstellen. Jetzt scheitere ich eigentlich "nur noch" an diesem Punkt.

    Vielen Dank für Eure Unterstützung.

    Gruß
    Reiner

    Dienstag, 23. Juli 2019 13:11

Antworten

  • Hallo Reiner,

    Dein Problem kann durch das Transport Neutral Encapsulation Format (TNEF) verursacht werden, das in Outlook verwendet wird, wie in diesem Thread beschrieben:
    Behavioral difference between mailItem.Send() and Send button in compose window
    Du kannst die Problemumgehung für das Wechseln zwischen Ordnern in Outlook versuchen, die von Sascha Lindtner im folgenden Thread bereitgestellt wird:
    Interop.Outlook.Explorer freeze after use

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Reiner Wolff Mittwoch, 24. Juli 2019 14:31
    Mittwoch, 24. Juli 2019 12:02
    Moderator

Alle Antworten

  • Hallo Reiner,

    Dein Problem kann durch das Transport Neutral Encapsulation Format (TNEF) verursacht werden, das in Outlook verwendet wird, wie in diesem Thread beschrieben:
    Behavioral difference between mailItem.Send() and Send button in compose window
    Du kannst die Problemumgehung für das Wechseln zwischen Ordnern in Outlook versuchen, die von Sascha Lindtner im folgenden Thread bereitgestellt wird:
    Interop.Outlook.Explorer freeze after use

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Reiner Wolff Mittwoch, 24. Juli 2019 14:31
    Mittwoch, 24. Juli 2019 12:02
    Moderator
  • Moin Ivan,

    vielen Dank für Deine Hilfe.

    Sie geht offensichtlich in die richtige Richtung.
    Ich habe nun eine funktionierende Lösung:

                cView = DirectCast(outApp.ActiveExplorer.CurrentView, Outlook.View)
                outApp.ActiveExplorer.CurrentView = cView.Name
    
                If outExplorer.CurrentView.Name = "unerledigt" Then
    

    Ich vermute, Du bezogst Dich aber eigentlich auf die Lösung mittels Delegate,
    denn die aktuelle Ansicht abzufragen, um die aktuelle Ansicht auf den abgefragten Wert zu setzen,
    finde ich einen ziemlich unschönen Workaround.

    Meine Versuche mit Delegate scheitern aber daran, dass ich kein Formular und kein Control habe, über das ich BeginInvoke aufrufen kann.
    Von daher sieht mein Code-Versuch dazu derzeit so aus:

        Private Sub outExplorer_FolderSwitch() Handles outExplorer.FolderSwitch
            OutlookFolderSwitch()
        End Sub
    
        Private Delegate Sub dlgCallOutlookFolderSwitch()
        Private Sub OutlookFolderSwitch()
            Dim ExecOutlookFolderSwitch As New dlgCallOutlookFolderSwitch(AddressOf FolderSwitch)
            BeginInvoke(ExecOutlookFolderSwitch)
        End Sub
    
        Private Sub FolderSwitch()
            Dim cView As Outlook.View
    
            With _ribbonConnector
                If outExplorer.CurrentView.Name = "unerledigt" Then
                    .mPressed = True '.IsPressed(outExplorer)
                Else
                    .mPressed = False
                End If
    
                .Ribbon.Invalidate()
    
            End With
        End Sub

    Scheitert aber verständlicher Weise am BeginInvoke.
    Meine Recherche zum Starten davon ohne Formular/Control war etwas fruchtlos bzw. ich hab's nicht verstanden.

    Hat hier jemand ein Codesnippet für mich oder noch besser einen Hinweis, der mich auf den richtigen Weg bringt?

    Vielen Dank
    Reiner

    Mittwoch, 24. Juli 2019 14:40