Zamkniecie podrzędnych formularzy i pokazanie głównego formularza.

0

Siema, mam problem z zamknięciem podrzędnych formularzy.
Strona Główna
screenshot-20211209202221.png
Po tym jak wejdę np. w pracowników chcę żeby po kliknięciu przycisku home wróciło mi do głównego formularza jednak tak się nie dzieje.
Próbowałem kilka sposobów na zamknięcie podrzędnych formularzy ale żaden nie wypalił. Jakieś pomysły ?

public partial class MainForm : BaseForm
    {
        EmployeesForm employeesForm;
        ClientsForm clientsForm;
        public MainForm()
        {
            InitializeComponent();
        }

        private void exitMainMenuButton_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void employeesMainMenuButton_Click(object sender, EventArgs e)
        {
            employeesForm = new EmployeesForm();
            openChildForm(employeesForm);
        }

        private void clientsMainMenuButton_Click(object sender, EventArgs e)
        {
            clientsForm = new ClientsForm();
            openChildForm(clientsForm);
        }

        private void openChildForm(Form form)
        {
            form.TopLevel = false;
            form.Parent = this;
            form.FormBorderStyle = FormBorderStyle.None;
            form.Dock = DockStyle.Fill;
            form.BringToFront();
            form.Show();
        }

        private void homeMainMenuButton_Click(object sender, EventArgs e)
        {
            if (Form.ActiveForm == employeesForm) employeesForm.Close();
            if (Form.ActiveForm == clientsForm) clientsForm.Close();
        }
    }
3

Po pierwsze primo nie trzymaj formularzy jako osobne zmienne (na pewno jest tam jakiś typ nadrzędny) - po prostu trzymaj je jako OpenForm. Jak możesz mieć więcej otwartych formularzy to trzymaj je tablicy/liście. Co dokładnie chcesz osiągnąć przez kliknięcie home: pokazać formularz home czy zamknąć pozostałe? Sprawdzałeś debuggerem, czy w ogóle wywołuje tego close na formularzu. Może Form.ActiveForm ma coś zupełnie innego niż employeesForm.

2

Poza tym co napisał @UglyMan , no spójrz na to:

private void homeMainMenuButton_Click(object sender, EventArgs e)
        {
            if (Form.ActiveForm == employeesForm) employeesForm.Close();
            if (Form.ActiveForm == clientsForm) clientsForm.Close();
        }

Przecież samo się prosi:

Form.ActiveForm.Close();

Zresztą to wcale nie musi być aktywna forma, po prostu trzymaj tak jak mówi poprzednik w jakimś OpenedForm to i na tym rób Close. A nawet nie tyle close, co Dispose:

if(OpenedForm != null)
{
    OpenedForm.Dispose();
    OpenedForm = null;
}

//a teraz jak otwierasz, to po prostu:
EmployeesForm form = new EmployeesForm();
//tutaj dodajesz do głównej i na końcu
OpenedForm = form;
0

Dzięki za podpowiedź będę trzymał je w liście i wywoływał dispose na każdym elemencie listy i teraz śmiga.

 public partial class MainForm : BaseForm
    {
        List<Form> openedForm = new List<Form>();
        public MainForm()
        {
            InitializeComponent();
        }

        private void exitMainMenuButton_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void employeesMainMenuButton_Click(object sender, EventArgs e)
        {
            EmployeesForm employeesForm = new EmployeesForm();
            openedForm.Add(employeesForm);
            openChildForm(employeesForm);
        }

        private void clientsMainMenuButton_Click(object sender, EventArgs e)
        {
            ClientsForm clientsForm = new ClientsForm();
            openedForm.Add(clientsForm);
            openChildForm(clientsForm);
        }

        private void openChildForm(Form form)
        {
            form.TopLevel = false;
            form.Parent = this;
            form.FormBorderStyle = FormBorderStyle.None;
            form.Dock = DockStyle.Fill;
            form.BringToFront();
            form.Show();
        }

        private void homeMainMenuButton_Click(object sender, EventArgs e)
        {
            foreach (Form form in openedForm)
            {
                form.Dispose();
            }
        }
    }

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