Otwieranie nowej formy z poziomu innej otwartej w panelu SplitContainer

0

Witam, mam problem z wywołaniem nowej formy z poziomu innej otwartej w panelu SplitContainer tzn. mam dwa panele z których w pierwszym mam menu a w drugim wyświetlam formy. Teraz chciałbym aby z poziomu otwartej jakiejś formy w panelu 2 otworzyć szybko inną również w tym panelu a poprzednią zamknąć. Próbowałem już na różne sposoby, w przypadku gdy zmieniam formy z poziomu panela pierwszego wszystko jest ok.
Próbowałem użyć tu również TabControl ale mam ten sam problem z pierwszej zakładki w której utworzyłem menu otwierają się kolejne ale w przypadku gdy chcę utworzyć nową z poziomu innej wygenerowanej podczas pracy programu to nic się nie dzieje.

0

forma otwarta w panelu? nie bardzo rozumiem, moglbys zrobic pare screenshotow aplikacji i dac je tutaj + fragment kodu ktory ma robic to czego oczekujesz a nie robi?

0

Przykładowo w form1 mam dodane tabControl1 oraz przycisk ładujący form2 do zakładki:

            Form2 myForm = new Form2();
            myForm.TopLevel = false;
            myForm.Parent = this;
            myForm.Dock = DockStyle.Fill;
            myForm.FormBorderStyle = FormBorderStyle.None;
            tabControl1.TabPages[1].Controls.Add(myForm);
            myForm.Show(); 

na form 2 również mam przycisk który ma załadować do innej zakładki form3

            Form3 myForm = new Form3();
            myForm.TopLevel = false;
            myForm.Parent = this;
            myForm.Dock = DockStyle.Fill;
            myForm.FormBorderStyle = FormBorderStyle.None;
            Form1 fm = new Form1();
            fm.tabControl1.TabPages[0].Controls.Add(myForm);
            myForm.Show(); 

i tu pojawia się problem ponieważ jeżeli próbuję z formy child dodać jakąkolwiek formę do tabControl1 znajdującej się na Form1 to kod nie działa. To samo mam w przypadku SplitContainer.
80765c7aed.png

0

Bo do konkretnych tabów powinny być ładowane UserControle (ewentualnie jakies panele, czy cos), a nie Formy

0

wez sobie przejrzyj kontrolki dostepne w designerze visual studio, to wlasnie ich powinienes uzywac a nie Form. jesli czegos ci brakuje to stworz sobie UserControl (jak zasugerowal @FakeAccount)
jesli bardzo chcesz miec formy w innych formach to poczytaj sobie o MDI np. tu http://www.c-sharpcorner.com/UploadFile/84c85b/building-mdi-winforms-application-using-C-Sharp/

0

Ok próbowałem też użyć userControl ale to i tak nie rozwiązało problemu bo w przypadku dodawania z form1 wszystko działa ok a jak już chcę zrobić to samo z poziomu zakładki to nie działa

             UserControl2 uc = new UserControl2();
            uc.Dock = DockStyle.Fill;
            Form1 mf = new Form1();
            mf.tabControl1.TabPages[0].Controls.Add(uc);
            uc.Show();
0

co nie dziala? czemu chcesz robic

uc.Show();

powinienes zrobic Show na formie a nie user control, forma automatycznie pokazuje wszystkie swoje kontrolki (chyba ze je ukryjesz)

0

uc.Show to pozostałość po kombinowaniu z formami. W chwili obecnej próbowałem np dodać jeden przycisk na formie który otwierał userControl2 w tabControl1 oraz utworzyłem metodę "pokaz" która jest wywoływana z przycisku znajdującego się na userControl2 to niestety nie działa ona tak jak należy tzn nie wrzuca userControl3 do taba.

        private void button1_Click_1(object sender, EventArgs e)
        {
            UserControl2 uc = new UserControl2();
            uc.Parent = this;
            uc.Dock = DockStyle.Fill;
            tabControl1.TabPages[1].Controls.Add(uc);
            tabControl1.SelectedIndex = 1;

        }

        public void pokaz()
        {
     
            UserControl3 uc = new UserControl3();
            uc.Parent = this;
            uc.Dock = DockStyle.Fill;
            tabControl1.TabPages[1].Controls.Add(uc);
            tabControl1.SelectedIndex = 0;

        } 

Wywołanie metody w userControl2

        private void button1_Click(object sender, EventArgs e)
        {

            Form1 mf = new Form1();
            mf.pokaz();
            
        } 

Wygląda to trochę tak jakby kontrolka userControl nie miała dostępu do tabControl1 znajdującego się na formie ale w innej klasie. Nie działa wtedy również zmiana aktywnej zakładki.

0

ciezko zgadywac. uruchom w trybie debug, ustaw pare breakpoint'ow i sprawdz co sie dzieje z wlasciwosciami kontrolek

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