Zamykanie panelu w innym formsie

0

Cześć chłopaki, mam problem nie widziałem innego rozwiązania w Internecie więc poproszę was o pomoc.
Mam napisany program tak, wybiera sobie kategorie, następnie przeskakuje do innego formsa gdzie użytkownik wybiera sobie składniki, po wybraniu składników, naciska przycisk zakończ otwiera mu się nowy forms (tamten jest w tle) gdzie ma wpisać numer zamówienia i po kliknięciu przycisku zamów otwarty forms ma się zamknąć a ten gdzie wybierał składniki ma się cofnąć do wyboru kategorii.

 LODY lod = new LODY();          
            lod.panel1.Controls.Clear();
            WyborDan Dania = new WyborDan() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
            Dania.FormBorderStyle = FormBorderStyle.None;
            lod.panel1.Controls.Add(Dania);

Niestety to co zrobiłem nie działa. Jak to powinienem napisać poprawnie.

0

W tytule masz "zamykanie panelu", a w treści masz o zamykaniu formsów. To w końcu jak to jest? Jeśli nie potrafisz znaleźć rozwiązania na tak banalne zagadnienie to znaczy, że coś przeinżynierowałeś i tak nie powinno być.

Form1 pokazuje listę kategorii -> wybiera kategorię i otwiera się Form2 -> przycisk "Zakończ" otwiera się Form3? A w kodzie lod.panel1.Controls.Clear() jest do?

0

Chyba się nie zrozumieliśmy: Mam program napisany w taki sposób: po uruchomieniu otwiera mi się program gdzie wyświetlają mi się 4 kategorię do wybrania po wybraniu kategorii otwiera mi się inny panel w tym głównym form.

W tytule masz "zamykanie panelu", a w treści masz o zamykaniu formsów. To w końcu jak to jest? Jeśli nie potrafisz znaleźć rozwiązania na tak banalne zagadnienie to znaczy, że coś przeinżynierowałeś i tak nie powinno być. - tak mam zatytułowany ten wątek bo chcę zamknąć panel i otworzyć kolejny. Użyłem sformułowania form, ponieważ odwołuje się do paneli z innych formsów****

Form1 pokazuje listę kategorii -> wybiera kategorię i otwiera się Form2 -> przycisk "Zakończ" otwiera się Form3? A w kodzie lod.panel1.Controls.Clear() jest do? wyczyszczenia panelu.

Może źle całość skonstruowałem

0

Mylisz pojęcia. Panel to panel, forms to forms. Ciężko się pomaga w sytuacjach, w których jest coś w podstawach samego programu źle. Cała twoja aplikacja opiera się na pokazywaniu i ukrywaniu paneli. Jesteś w stanie wrzucić parę screenów, abym mógł wizualnie zrozumieć twój problem i znaleźć rozwiązanie albo nawet lepszą implementację?

0

Stworz sobie User Control i ukrywaj go lub pokazuj kiedy chcesz

0

@gswidwa1: WyborDan Dania chyba jest UC. Ciężko cokolwiek określić po takim opisie. Wszystko wskazuje na to, że to jest jedna forma na której się ukrywa/pokazuje panele, w których jest wybrany UC. Albo to jest jeden panel, do którego wciska się UC. Dziwne rozwiązanie dlatego nie wiem jak pomóc.

0

Sama aplikacja wygląda tak.
screenshot-20210407110801.png

screenshot-20210407110707.png

Wybieram sobie którąś z kategorii: klikam przycisk i otwiera mi się kategoria, którą wybrałem.

        private void button1_Click(object sender, EventArgs e)
        {
            this.panelLoader.Controls.Clear();
            kat1 kat1 = new kat1() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
            kat1.FormBorderStyle = FormBorderStyle.None;
            this.panelLoader.Controls.Add(kat1);
            kat1.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.panelLoader.Controls.Clear();
            kat4 kat4 = new kat4() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
            kat4.FormBorderStyle = FormBorderStyle.None;
            this.panelLoader.Controls.Add(kat4);
            kat4.Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.panelLoader.Controls.Clear();
            kat3 kat3 = new kat3() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
            kat3.FormBorderStyle = FormBorderStyle.None;
            this.panelLoader.Controls.Add(kat3);
            kat3.Show();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.panelLoader.Controls.Clear();
            kat2 kat2 = new kat2() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
            kat2.FormBorderStyle = FormBorderStyle.None;
            this.panelLoader.Controls.Add(kat2);
            kat2.Show();
        }

screenshot-20210407111253.png

Wybieram sobie dodatki i otwiera mi się kolejny forms jako okienko.

 private void button12_Click(object sender, EventArgs e)
        {
            
            
                kat1_PAGER pager = new kat1_PAGER(this);
                                                           
                pager.Show();
                 
        }

screenshot-20210407112448.png

I teraz tak, chciałbym uzyskać taki efekt, że po kliknięciu przycisku zamów zamknęło się to okno dodatkowe a to okno gdzie wybieraliśmy dodatek cofnęło się do wyboru kategorii.

1

Zamiast Show() zrób ShowDialog(). Problem polega pewnie na tym, że guziki z kategoriami masz zakodowane ręcznie, to nie jest panel. Więc albo zrobisz z tego ListaKategorii i będzie widok tych przycisków albo uruchom ponownie aplikacje, po zatwierdzeniu zamówienia.

 private void button12_Click(object sender, EventArgs e)
        {
                kat1_PAGER pager = new kat1_PAGER(this);

                if(pager.ShowDialog() == DialogResult.Ok)
                {
                    // Tutaj wczytaj panel z przyciskami
                    // lub uruchom ponownie aplikacje
                    Application.Restart();
                }
        }

Tego się podziewałem, że to jest przekombinowane. Tak bardzo przekombinowane, że aż ciężko cokolwiek poradzić. Na początek, pozbądź się tych paneli, przełóż wszystko do okien, otwieraj te okna poprzez ShowDialog(), aby nie można było klikać w okna "niżej" (Parent). Sprawdzaj ShowDialog() == DialogResult.Ok tzn, że okno zostało zatwierdzone, poprawnie. Skorzystaj z kontrolki NumericUpDown, nie wymyślaj koła na nowo. Jeśli potrzebujesz jakiś danych w otwieranym oknie, wrzuć obiekt do konstruktora

    public partial class Form1 : Form
    {
          private string _kategoria;
          public Form1(string kategoria)
          {
               _kategoria = kategoria;
          }

          private void button12_Click(object sender, EventArgs e)
          {
                // Guzik "ZAMÓW"
                DialogResult = DialogResult.Ok;
          }
    }

Nie potrzebujesz wtedy 4 okien, a jednego, a o danych i operacjach będzie decydować kategoria

Form1 form1 = new Form1("LODY");
if(form1.ShowDialog() == DialogResult.Ok) 
{
    // Poszło poprawnie, zrób coś w głównym oknie jeśli trzeba.
}

Jak sama nazwa technologii wskazuje - to jest WinForms, a nie WinPanels ;-)

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