2012-10-21 96 views
2

我做了一個小文本編輯器,將文本從RichTextBox保存到.rtf文件中,但每當我單擊打開的菜單選項時,它將打開保存文件對話框。我無法弄清楚爲什麼有人能幫我解決問題?爲什麼我的open menuIItem對話框打開保存文件對話框?

以下是菜單對話框項目的名稱。

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



     } 

    } 
} 
+0

你確定打開的文件菜單項正在調用正確的事件處理程序嗎? – WarrenG

回答

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 
} 

附:您可以調試以查看執行流程,並且您可能會看到menuStrip1 ItemClicked事件首先被引發,並且該代碼正在被首先執行。