RichTextBox内容在保存时不会更新

本文关键字:更新 保存 RichTextBox | 更新日期: 2023-09-27 18:27:23

我的表单中有一个列表框控件,它包含文件夹中特定类型文件的路径。在项目双击时,我将动态地将页面添加到选项卡控件中,并将文件的内容加载到富文本框的对象中。现在我想编辑内容并再次保存。但是,当我打开保存的文件时,编辑的内容不会被保存,它只有在将文件加载到富文本框时存在的早期内容。如何更新富文本框对象文本并保存。

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

RichTextBox内容在保存时不会更新

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

其他需要注意的事项:

  • 保存过程中是否出现异常
  • 文件是否确实与第一个文件的名称相同
  • SaveFile方法只保存rtf时,为什么要将对话框过滤器保存到*.rtf、*.txt和*.html
  • 路径操作通常应该通过System.IO.Path类来完成
  • 考虑为特定的活动引入方法/函数,这样就不会出现如此庞大的代码墙方法