C# Richtextbox w TabControl

C# Richtextbox w TabControl
D1
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:34
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.

Kopiuj
        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

Kopiuj
    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.");
            }
            
        }
JU
  • Rejestracja:około 22 lata
  • Ostatnio:3 miesiące
  • Postów:5042
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.