2017-05-03 1 views
0

Ich erstelle ein Outlook-Add-In, das ein Unterformular hat. Das Formular hat eine Schaltfläche, über die ich ein Mailelement generieren möchte, wenn der Benutzer darauf klickt. Ich möchte einige Informationen in der E-Mail automatisch ausfüllen und sie dann dem Nutzer zur freien Verfügung überlassen.MailItem.Display (true | false) Ausnahme bei Verwendung in WinForms

Mein Code sieht wie folgt aus:

private void btnMailDocNotice_Click(object sender, EventArgs e) 
    { 
     string clientInfo = string.Empty; 
     string matInfo = string.Empty; 
     string author = string.Empty; 
     string dType = string.Empty; 
     string fLocation = string.Empty; 
     string keyWords = string.Empty; 
     string docName = string.Empty; 

     clientInfo = this.mCboClient.Text + " " + lblClient; 
     matInfo = this.mCboMatter.Text + " " + lblMatter; 
     author = this.txtAuthor.Text; 
     dType = this.mCboDocType.Text.ToUpper(); 
     fLocation = this.txtSavePath.Text; 
     keyWords = this.txtKeyWords.Text; 
     docName = this.txtDocName.Text; 

     this.sendDocNotice = true; 
     this.Hide(); 
     CreateMailItem(clientInfo, matInfo, author, dType, this.operatorCode.ToUpper(), fLocation, keyWords, docName); 
     this.Show(); 
    } 

private void CreateMailItem(string clientInfo, string matInfo, string author, string dType, string profiledBy, string fLocation, string keyWords, string docName) 
    { 
     this.DNoticeItem = (Outlook.MailItem)ThisAddIn.myApp.CreateItem(Outlook.OlItemType.olMailItem); 
     this.DNoticeItem.Subject = "Document: " + docName; 
     this.DNoticeItem.HTMLBody = "<span style=\"font-family:Calibri; font-size: 11pt;\">KeyWords: " + keyWords + "</span>"; 
     this.DNoticeItem.HTMLBody += "<br />Client: " + clientInfo; 
     this.DNoticeItem.HTMLBody += "<br />Matter: " + matInfo; 
     this.DNoticeItem.HTMLBody += "<br />Author: " + author; 
     this.DNoticeItem.HTMLBody += "<br />Doc Type: " + dtClient; 
     this.DNoticeItem.HTMLBody += "<br />Profiled by: " + profiledBy; 
     this.DNoticeItem.HTMLBody += "<br />File://" + fLocation; 
     this.DNoticeItem.Importance = Outlook.OlImportance.olImportanceNormal; 
     this.DNoticeItem.Display(false); 
    } 

Das Problem, das ich in laufen lasse, ist es eine Ausnahme auf der mailitem.display Funktion ausgelöst, ob ich richtig oder falsch (tut ein bisschen Research sagt, dass bestimmt, ob der Benutzer auf das Outlook-Hauptfenster zugreifen kann oder nicht, während das Mailelement geöffnet ist. Die Ausnahme ist eine COM-Ausnahme von "Ein Dialogfeld ist geöffnet. Schließen Sie es und versuchen Sie es erneut". Ich habe versucht, das WinForm vor dem Funktionsaufruf zu verbergen, der das Postelement erstellt, und es dann erneut anzeigen, nachdem die Funktion beendet wird aber es funktionierte nicht. Ich habe versucht, eine Version des Codes, wo ich System.Diagnostics.Process.Start() zu versuchen, die Datei nach dem Speichern auf der Festplatte zu öffnen, und während es eine Ausnahme aus dem Add-in auslöst, Outlook fordert die Benutzer mit einem Meldungsfeld der gleichen Nachricht von der ComException. Ich habe sogar versucht, ein Feld zu erstellen, um zu sehen, ob die Benachrichtigungs-E-Mail ausgearbeitet werden sollte, und dachte, dass der Code nach einem form.close() - Aufruf dafür sorgen würde, dass der Abschlussaufruf zumindest über das Dialogfeld verfügt Sperren Outlook, und ich habe immer noch die gleiche Ausnahme.

Gibt es eine Möglichkeit zu erreichen, was ich will? Hat jemand irgendwelche Vorschläge? Ich stecke im Moment fest und würde mich über jede Hilfe/Hinweise/Vorschläge freuen, die jemand in dieser Ausgabe anbieten kann. Ich entschuldige mich aufrichtig, wenn das eine doppelte Frage ist - ich konnte keine gute Antwort auf die Frage finden. Vielen Dank im Voraus für Ihre Zeit.

Antwort

0

Erstens, warum nicht yoru eigene Form nicht anzeigen?

Zweitens (und das ist ziemlich wichtig) Sie nicht Verwendung Code wie folgt

this.DNoticeItem.HTMLBody += "<br />Client: " + clientInfo; 

Jedes Mal, wenn Sie eine Zeile wie das laufen, rufen Sie Htmlbody, fügen Sie ein paar Sachen, um es (die HTML-Herstellung falsch formatiert), setzen Sie HTMLBody erneut und erzwingen Sie Outlook, um Ihren (missgestalteten) HTML-Code sinnvoll zu machen. Dies (vorausgesetzt, Outlook kann Ihren HTML-Code parsen und korrigieren) führt dazu, dass der zurückgegebene HTML-Code sich von dem unterscheidet, für den Sie ihn festgelegt haben.

Erstellen Sie den HTML-Text einmal mit einer regulären Zeichenfolge, und legen Sie die HTMLBody-Eigenschaft nur einmal fest.

+0

Verzeihen Sie meine Unwissenheit - können Sie mir ein Beispiel geben, eine Form unmodisch darzustellen? Ich bin mit dem Begriff nicht vertraut. Danke für den Tipp auf den HTML, hatte keine Ahnung, re: HTMLBody. Ich werde konstruieren, dann bewerben Sie sich einmal wie Sie empfehlen. –

+0

Welcher Code zeigt das Formular an? –

+0

Aufforderung Eingabeaufforderung = neue Eingabeaufforderung (Mail, OutlookItemType.Sent); prompt.ShowDialog(); –

Verwandte Themen