我正在为outlook 2010开发一个加载项。
基本上,我的功能区上有一个按钮,用于选择所选的电子邮件,并将其保存到文本文件中。如果电子邮件包含某个主题,则保存将自动完成到硬编码文件路径。如果没有,则打开一个窗口表单,要求用户输入文件路径。
当用户选择了一个路径,然后单击“确定”时,保存就会发生,然后表单关闭......但随后重新打开...它似乎正在创建它的新实例。 ..如果我单击“取消”或“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();
}
我已经简化了这一点,因此更容易阅读。 任何帮助将不胜感激。
答案 0 :(得分: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; }
}