c# – 保存时不更新RichTextBox内容

我的表单中有一个列表框控件,其中包含文件夹中特定类型文件的路径.

在项目上双击我将动态添加页面到选项卡控件并将文件的内容加载到富文本框的对象.现在我想编辑内容并再次保存.但是当我打开保存的文件时,编辑的内容没有保存,它只有早期的内容,当加载文件到富文本框时.如何更新富文本框对象文本并保存.

 private void lstErrorList_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ArrayList errorType = new ArrayList();
            RichTextBox myrich = new RichTextBox();
            string[] list;

            TabPage selectedTab;

            if (lstErrorList.Items.Count > 0)
            {
                string error = lstErrorList.SelectedItem.ToString();
                int result = error.LastIndexOf('\\');
                string filename = error.Substring(result + 1, error.Length - (result + 1));
                list = error.Split(new char[] { '\t' });
                int pagecount;
                TabPage tp = new TabPage();
                pagecount = this.tabControl1.TabPages.Count;
                bool found = false;
                foreach (TabPage tab in tabControl1.TabPages)
                {
                    if (filename.Equals(tab.Name))
                    {
                        tabControl1.SelectedTab = tab;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    tabControl1.TabPages.Add(filename, filename);
                    tabControl1.SelectedTab = tabControl1.TabPages[tabControl1.TabPages.Count - 1];
                    int i = tabControl1.TabPages.Count;
                    myrich.Height = this.tabControl1.Height - 30;
                    myrich.Width = this.tabControl1.Width - 10;
                    myrich.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom);
                    tabControl1.TabPages[tabControl1.TabPages.Count - 1].Controls.Add(myrich);
                    string path = list[7];
                    objReader = new System.IO.StreamReader(path);
                    myrich.Text = objReader.ReadToEnd();
                    objReader.Close();
                }

                int val = 0;
                string val1 = list[3];
                string replacement = Regex.Replace(val1, @"\t|\n|\r|[a-zA-Z]", "");
                val = Convert.ToInt32(replacement);
                foreach (Control ct in tabControl1.SelectedTab.Controls)
                {
                    if (ct is RichTextBox)
                    {
                        RichTextBox x = (RichTextBox)ct;

                        x.Select(val, wordToFind.Length);
                        x.SelectionBackColor = Color.Wheat;
                        x.Focus();
                        break;
                    }
                }
            }
        }
 private void mnuValidate_Click(object sender, EventArgs e)
        {                      
            myrich.Refresh();
            myrich.Update();           
            foreach (TabPage page in tabControl1.TabPages)
            {                
                    string Saved_File = "";                
                    saveFD.Title = "Save the file";
                    saveFD.FileName = ChosenFileName;
                    saveFD.Filter = "Text File|*.txt|Html File|*.html|Xhtml File|*.xhtml|XML File|*.xml";
                    Saved_File = saveFD.FileName;
                    foreach (Control ct in tabControl1.SelectedTab.Controls)
                    {
                        if (ct is RichTextBox)
                        {
                            int x = tabControl1.SelectedTab.Controls.IndexOf(ct);
                            MessageBox.Show(x.ToString());
                            ((RichTextBox)page.Controls[x]).SaveFile(Saved_File,RichTextBoxStreamType.RichText);                          

                        }        
}


                    this.tabControl1.TabPages.Remove(page);   


            }           
            lstErrorList.Items.Clear();
            if (filePathlist.Count == 0)
            {
                MessageBox.Show("No input files found,Please upload files and validate again", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (HTML_QC_MultipleFiles.Errors.Checkeditemlist.Count == 0)
                {
                    MessageBox.Show("Please select the error type and validate again", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    if (singlefile == true)
                    {
                        Validate();
                    }
                    else
                    {
                        bool errorFound = false;
                        string[] words;
                        foreach (string file in filePathlist)
                        {
                            int lineno, index;
                            objReader = new System.IO.StreamReader(file);
                            myrich.Clear();
                            myrich.Height = this.tabControl1.Height - 30;
                            myrich.Width = this.tabControl1.Width - 10;
                            myrich.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom);
                            myrich.Text = objReader.ReadToEnd();
                            ChosenFileName = file;
                            Validate();
                            objReader.Close();
                        }
                    }
                }
            }
        }

最佳答案 我认为问题可能是你的代码要求保存文件名,然后遍历控件集,将每个文件保存到同一个文件中.如果你有两个富文本框,那么保存第一个文本框可能会被第二个覆盖.

其他需要注意的事项:

>保存期间是否有例外?
>文件肯定与第一个文件保存的名称相同吗?
>当SaveFile方法仅保存RTF时,为什么将对话框过滤器保存为* .rtf,* .txt和* .html?
>路径操作通常应通过System.IO.Path类完成.
>考虑为特定活动引入方法/函数,以便最终不会遇到如此庞大的代码墙方法.

点赞