C# Richtextbox w TabControl

0

Witam,

Mam funkcję dodającą nową tabPage a w nim jest RichTextBox a następnie chcę zapisać do pliku ale podczas zapisu wyskakuje mi że jest null.

Kod na dodanie nowego tabPagea.

        private void newModuleToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TabPage tab = new TabPage();
            RichTextBox textbox = new RichTextBox();

            tab.Text = promptValue;
            tabControl1.Controls.Add(tab);
            tabControl1.SelectTab(tabControl1.TabCount - 1);

            textbox.Parent = tabControl1.SelectedTab;
            textbox.Dock = DockStyle.Fill;
        }

Zapis

    private void saveModuleToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string name = tabControl1.TabPages[0].Text;
            RichTextBox richText = tabControl1.SelectedTab.Controls[0] as RichTextBox;

            if (richText != null)
            {
                saveFileDialog1.Filter = ("TXT file|*.txt");
                saveFileDialog1.FileName = name;
                saveFileDialog1.ShowDialog();
                File.WriteAllLines(saveFileDialog1.FileName, richText.Lines); << Tu zgłasza że ruchText jest null.
            }
            else
            {
                MessageBox.Show("Null: " + '"' +  name + '"' + " is empty.");
            }
            
        }
0

Po pierwsze nie masz pewności, czy tabControl1.SelectedTab (w saveModule...) zwraca Ci tego taba, którego chcesz. Zwraca aktualnie wybranego taba, na którym może być cokolwiek.
Poza tym, czepię się jednej rzeczy. Nigdzie nie dodajesz RichEdita do taba. Nigdzie nie masz:
"tab.Controls.Add(richEdit)"

Ustawiasz tylko parenta dla RichEdita.

Sytuacja, jaką opisujesz nie powinna mieć miejsca - operator as powinien zatroszczyć się o to, żeby richEdit był nullem. A skoro przechodzi Ci ten warunek i wykrzacza się faktycznie w linijce, którą opisujesz, to znaczy kilka rzeczy:

  • że gdzieś wcześniej usuwasz w jakiś sposób tego richEdita (wywołujesz na nim dispose lub robi to jest parent w momencie, gdy jest niszczony) i akurat trafiasz tak niefortunnie w garbageCollectora, który faktycznie usuwa tego richedita.
  • w jakiś sposób usuwasz tego richedita w innym wątku

Coś podejrzewam, że nie pokazujesz fragmentu kodu, który faktycznie stanowi problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1