Содержимое RichTextBox не обновляется при сохранении

У меня есть элемент управления списком в моей форме, который содержит пути файлов определенного типа из папки. При двойном щелчке элемента я динамически добавляю страницу в элемент управления вкладки и загружаю содержимое файла в объект богатого текстового поля. Теперь я хочу отредактировать содержимое и сохранить его снова. Но когда я открываю сохраненный файл, отредактированное содержимое не сохраняется, оно содержит только предыдущее содержимое, которое было там при загрузке файла в текстовое поле. Как обновить текст текстового поля и сохранить текст.

private void *****************************(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.*********();
 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.*********();
 ChosenFileName = file;
 Validate();
 objReader.Close();
 }
 }
 }
 }
 }
1 ответ

Я думаю, проблема может заключаться в том, что ваш код запрашивает имя файла для сохранения, а затем выполняет итерацию с помощью набора элементов управления, сохраняющих каждый в один файл. Если у вас есть два богатых текстовых поля, то это могут быть усилия по спасению первого, которые будут перезаписаны вторым.

Другие вещи, на которые нужно обратить внимание:

  • Есть ли исключение во время сохранения?
  • Сохраняется ли файл с тем же именем, что и первый?
  • Почему вы сохраняете диалоговый фильтр в *.rtf, *.txt и *.html, когда метод SaveFile сохраняет только RTF?
  • Пути-манипуляции обычно должны выполняться с помощью класса System.IO.Path.
  • Подумайте о том, как вводить методы/функции для конкретных действий, чтобы вы не оказывали таких больших методов на основе кода.

licensed under cc by-sa 3.0 with attribution.