Treeview & Imagelist - problem z Dispose

0

Witajcie,

Tworze ekran opcji do mojego programu, chce żeby miał on postać drzewka z którego będą wyzwalane Formy do Imagelisty.
Wstępnie wygląda to tak:

11

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Linia
{

    public partial class Form6 : Form
    {
        private Form1 Form1;
      

        public Form6(Form1 Form)
        {
            InitializeComponent();
            this.Form1 = Form;
        }

        private Form f;

        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode treeNode = treeView1.SelectedNode;
            switch (treeNode.Text)
            {
                case "Ustawienia celu":

                    f.Dispose();
                    f = new Form3();
                    f.TopLevel = false;

                    this.panel1.Controls.Add(f);
                    f.Dock = DockStyle.Fill;
                    f.Show();

                    break;

                case "Ustawienia wygladu":

                    f.Dispose();
                    f = new Form2();
                    f.TopLevel = false;

                    this.panel1.Controls.Add(f);
                    f.Dock = DockStyle.Fill;
                    f.Show();

                    break;

           

                case "Ustawienia przerw i zmian":

                    f.Dispose();
                    f = new Form4();
                    f.TopLevel = false;

                    this.panel1.Controls.Add(f);
                    f.Dock = DockStyle.Fill;
                    f.Show();

                    break;



            }
        }

        private void Form6_Load(object sender, EventArgs e)

        {
            this.treeView1.Nodes[0].ExpandAll();
            this.treeView1.Nodes[1].ExpandAll();
            this.treeView1.Nodes[2].ExpandAll();
            this.treeView1.Nodes[3].ExpandAll();

            f = new Form3();
            f.TopLevel = false;

            this.panel1.Controls.Add(f);
            f.Dock = DockStyle.Fill;
            f.Show();
        }
    }
}


Okienko opcji (czyli tego przedstawionego powyżej) wyzwalane jest z Forma podstawowego, po wyzwoleniu automatycznie wyskakuje błąd przy

case "Ustawienia celu":
f.Dispose();

Jest to błąd:

12

Ktoś ma z Was pomysł dlaczego tak się dzieje ?

1

f jest null. Zrób sobie sprawdzenie przed dispose()

if(f != null) 
  f.Dispose();
0

@AdamWox

zadziałało, jednak teraz mam inny problem (chyba efekt domina :) )

po wywołaniu w Formie 6 okienka Form3 i wpisaniu w nim danych, które mają trafić do Form1 wyrzuca błąd "System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”"

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Linia
{
    public partial class Form3 : Form
    {
        
        private Form6 Form6;
        private Form1 Form1;

        


        public Form3(Form6 Form)
        {
            InitializeComponent();
            this.Form6 = Form;
        }

        public Form3(Form1 Form)
        {
            InitializeComponent();

            this.Form1 = Form;
        }

        private void Form3_Load(object sender, EventArgs e)
        {

        }

   


        public void button1_Click(object sender, EventArgs e)
        {
           
            int minuty = 00;
            int sekundy = 00;
            int.TryParse(textBox2.Text, out minuty);
            int.TryParse(textBox3.Text, out sekundy);
            Form1.circularProgressBar1.Update();
            Form1.czas = new TimeSpan(0, minuty, sekundy);
            Form1.circularProgressBar1.Update();
            Form1.circularProgressBar1.Maximum = minuty * 61 + sekundy;
            Form1.WyswietlCzas();
            Form1.label119.Text = textBox1.Text;
            Form1.circularProgressBar1.Update();
      
        }



        private void textBox2_TextChanged(object sender, EventArgs e)
        {
           
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }
    }
}


Wyrzuca ten błąd przy kodzie łączenia z Form1.

W sumie nic nie grzebałem w tym formie i to mnie dziwi

0

Masz bardzo dużo błędów logicznych i złe podejście. Prawdopodobnie użyłeś konstruktora w którym przekazujesz Form6, więc twój Forn1 jest null.

0

już doszedłem w Formie6
w kodzie

f = new Form2(Form1);

zamiast Form1 był "this"

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