为什么我的open menuIItem对话框打开了保存文件对话框?

时间:2012-10-21 01:27:20

标签: c# winforms richtextbox rtf

我创建了一个小文本编辑器,将RichTextBox中的文本保存到.rtf文件中,但每当我单击打开菜单选项时,它都会打开保存文件对话框。我无法弄清楚为什么有人可以帮助我?

以下是菜单对话框项的名称。

MenuStrip:menuStrip1 保存:saveMenu 打开:openMenu RichTextBox:richTextBox1

这是我正在编写的代码......

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //save the file

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

            // Text from the rich textbox rtfMain
            string str = richTextBox1.Text;
            // Create a new SaveFileDialog object
            using (SaveFileDialog dlgSave = new SaveFileDialog())
                try
                {
                    // Available file extensions
                    dlgSave.Filter = "Rich Text Format (.rtf)|*.rtf";
                    // SaveFileDialog title
                    dlgSave.Title = "Save";
                    // Show SaveFileDialog
                    if (dlgSave.ShowDialog() == DialogResult.OK && dlgSave.FileName.Length > 0)
                    {
                        richTextBox1.SaveFile(dlgSave.FileName);

                    }
                }
                catch (Exception errorMsg)
                {
                    MessageBox.Show(errorMsg.Message);
                } 


        }

        private void openMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

        {
            using (var of = new OpenFileDialog())
            {
                of.DefaultExt = "*.rtf";
                of.Filter = "RTF Files|*.rtf";

                if (of.ShowDialog() == DialogResult.OK)
                    richTextBox1.Rtf = System.IO.File.ReadAllText(of.FileName);
            }



        }

    }
}

1 个答案:

答案 0 :(得分:0)

我假设你的openMenu是menuStrip1上的子项;因此,当您单击它时,会引发menuStrip1_ItemClicked事件,这正是您拥有打开“保存”对话框的代码的位置。

您应该摆脱openMenu_ItemClicked方法,而是使用menuStrip1的ItemClicked事件连接一个menuStrip1_ItemClicked方法,并且在该方法中,您可以确定单击了哪个项目以及相应的操作。

因此,在menuStrip1_ItemClicked方法中,您可以执行类似...

的操作
if(e.ClickedItem == this.openMenu)
{
    //Code to bring up Open File Dialog here
}
else if (e.ClickedItem == this.saveMenu)
{
    //Code to bring up Save Dialog here
}

P.S。您可以调试以查看执行流程,您可能会看到首先引发menuStrip1 ItemClicked事件,并且首先执行该代码。