Содержимое RichTextBox не обновляется при сохранении - PullRequest
4 голосов
/ 10 марта 2012

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

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

1 Ответ

2 голосов
/ 10 марта 2012

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

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

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