0

我正在为 Outlook 2010 开发一个加载项。
基本上,我的功能区上有一个按钮,用于获取选定的电子邮件,并将其保存到文本文件中。如果电子邮件包含某个主题,则会自动保存到硬编码文件路径。如果没有,则会打开一个 Windows 窗体,要求用户输入文件路径。

当用户选择了一条路径并单击“确定”时,将进行保存,然后表单关闭......但随后它重新打开......它似乎正在创建它的新实例或其他东西......如果我单击“取消”或“X”它会关闭,但我不明白为什么它第一次没有正确关闭。

下面是我的代码

//This is myRibbon.cs
private void btn_SaveFile_Click(object sender, RibbonControlEventArgs e) 
{
   //other code
   if (subject = "xyz") 
   {
      //other code
      textFile.Save();
   }
   else
   {
      MyPopup popup = new MyPopup();
      popup.ShowDialog();
   }
}

//This is MyPopup.cs
private void btnOK_Click(object sender, EventArgs e) 
{
   var filePath = txtFilePath.Text;
   if (!string.IsNullOrWhiteSpace(filePath)) 
   { 
       SaveEmailToText(filePath); 
      this.Close(); 
   }
   else 
   { //show message box with error }
   this.Close(); 
}

private static void SaveEmailToText(string filePath) 
{
    //other code
    textFile.Save();
}

我已经简化了很多,所以它更容易阅读。任何帮助将不胜感激。

4

1 回答 1

1
  • 考虑使用OpenFileDialog而不是您的弹出表单
  • 仅使用您的弹出窗口(或文件对话框)来获取文件名
  • 将电子邮件保存代码保存在一个地方(否则您将有重复的代码)
  • DialogResult在进一步处理之前验证对话形式
  • 表格是一次性的 -using声明将自动处理它们
  • 不要关闭对话框表单 -DialogResult改为设置它的属性

这是重构的代码:

private void btn_SaveFile_Click(object sender, RibbonControlEventArgs e) 
{
   string filePath = defaultPath;

   if (subject != "xyz") 
   {
      using(MyPopup popup = new MyPopup())
      {
         // user can close popup - handle this case
         if (popup.ShowDialog() != DialogResult.OK)
             return;
         filePath = popup.FilePath;
      }
   }       

   SaveEmailToText(filePath);
}

private void SaveEmailToText(string filePath) 
{
   //other code
   textFile.Save();
}

还有你的弹出窗口,应该替换为OpenFileDialog

private void btnOK_Click(object sender, EventArgs e) 
{
    if (string.IsNullOrWhiteSpace(FilePath))
    { 
        //show message box with error
        DialogResult = DialogResult.Cancel;
        return;
    }

    // you can assign default dialog result to btnOK in designer
    DialogResult = DialogResult.OK;
}

public string FilePath
{
    get { return txtFilePath.Text; }
}
于 2012-10-30T21:07:04.743 回答