2

我制作了一个小型文本编辑器,可以将文本从 a 保存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);
            }



        }

    }
}
4

1 回答 1

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
}

PS 你可以调试看看执行流程,你可能会看到 menuStrip1 ItemClicked 事件首先被引发,并且代码首先被执行。

于 2012-10-21T01:55:12.873 回答