2017-05-03 3 views
0

サブフォームを持つOutlook Add Inを作成しています。フォームには、ユーザーがクリックするとメールアイテムを生成するボタンがあります。私は電子メールにいくつかの情報を自動入力し、ユーザーが余暇に送るためにそれを残したいと思います。WinFormsで使用されるMailItem.Display(true | false)例外

私のコードは次のようになります、私はに実行している問題

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); 
    } 

それは、mailitem.display関数に例外を発生させ、私は真または偽使用するかどうか(のビットをやっています調査では、メールアイテムが開いている間にユーザーがメインのOutlookウィンドウにアクセスできるかどうかを判断します)。例外は、「ダイアログボックスが開いています。閉じてからもう一度やり直してください」というCOM例外です。私は、関数が終了した後に再度表示するメール項目を作成する関数呼び出しの前に、WinFormを隠そうとしましたが、動作しませんでした。私はSystem.Diagnostics.Process.Start()を使用してファイルをディスクに保存した後に開こうとするバージョンのコードを試しましたが、アドインから例外を発生させない間に、OutlookはComExceptionからの同じメッセージのメッセージボックスを持つユーザー。私は、文書を電子メールで通知するかどうかを調べるフィールドを作成しようとしていて、form.close()呼び出しの後にコードを処理すると考えていました。 Outlookをロックして、私はまだ同じ例外があります。

私が欲しいものを達成する方法はありますか?誰にも何か提案はありますか?私は今のところ固執していますし、誰かがこの問題で提供しなければならない助言/指針/示唆に感謝します。重複した質問であれば心からお詫び申し上げます。私はその質問に対して良い答えを見つけることができませんでした。あなたの時間のために事前にありがとうございます。

答えて

0

まず、自分自身のフォームを模倣して表示してみませんか?第二に

(これはかなり重要です)、あなたはのHtmlBodyを以下

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

あなたがそのような行を実行するたびのようなない利用コードを取得するか、HTMLを作る(それにいくつかのものを追加不正な形式の)HTMLBodyを再度設定して、あなたの(不正な形式の)HTMLを理解できるようにOutlookを強制します。これは(OutlookがあなたのHTMLを解析して修正することができると仮定すると)、あなたが設定したHTMLとは異なるHTMLが返されます。

通常の文字列を使用してHTML本体を1回構築し、HTMLBodyプロパティを1回だけ設定します。

+0

私の無知を許してください - あなたは私にモードを表示する例を教えてもらえますか?私はこの用語になじみがない。 HTMLのヒントをお寄せいただき、ありがとうございました.HTMLBody。私は作って、あなたが推薦するように一度申し込みます。 –

+0

フォームを表示するコードは何ですか? –

+0

プロンプトプロンプト=新しいプロンプト(mail、OutlookItemType.Sent); prompt.ShowDialog(); –