Jestem nowicjuszem w C# i formie okienkowej, robię projekt i napotykam jakiś problem

  1. jak mogę poruszać się po formularzach w oknie (mam pasek menu, po kliknięciu pokaże element "Marka", więc kiedy go kliknę, powinien otworzyć się w oknie, nie chcę czegoś za pomocą mdiparent/ kontenera, mam form1 i form2, następnie wstawiam pasek menu do form1, który jest w środku form1, jeśli użyjesz mdiparent/container, to form1 content/thing zablokuje form2 )

2.Używam poniższego kodu, a problem polega na tym, że chcę zamknąć formularz 1, który klikam na "Marka" w pasku menu ... ale jak???

public partial class Form1 : Form
{
    //  i put the menu strip in form1 design
    public Form1()
    {
        InitializeComponent();
    }

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

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check = new Form2();
        Check.Show();
    }
}
12
cutexxxbabies 24 czerwiec 2011, 07:52

3 odpowiedzi

Najlepsza odpowiedź

Nie możesz po prostu zamknąć Form1, ponieważ jest to główny formularz, ale możesz go ukryć. Użyj this.Hide().

private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2();
    Check.Show();
    Hide();
}

[EDYTUJ]

Nie jestem pewien, czy o to pytasz. Ale...

Istnieje wiele sposobów na zaimplementowanie nawigacji między formularzami, na przykład:

W Form1:

private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Tag = this;
    form2.Show(this);
    Hide();
}

W Form2:

private void button1_Click(object sender, EventArgs e)
{
    var form1 = (Form1)Tag;
    form1.Show();
    Close();
}
23
Alex Aza 24 czerwiec 2011, 08:19
Byłoby pomocne, gdybyś mógł powiedzieć, jak wrócić do Form1 z Form2 bez tworzenia nowej instancji Form1 (jako że jest w trybie ukrytym)
 – 
Coder323
24 czerwiec 2011, 08:09
- Nie zdawałem sobie sprawy, że o to się pyta. Zaktualizowałem odpowiedź.
 – 
Alex Aza
24 czerwiec 2011, 08:19
Jestem pewien, że pytający miałby problem z powrotem do Form1 , właśnie pomyślałem o pomocy.... Dziękuję za twój kod.....
 – 
Coder323
24 czerwiec 2011, 08:23

Myślę, że powinieneś raczej tworzyć kontrolki użytkownika niż różne formularze. Następnie możesz dodać swoje kontrolki użytkownika w panelu głównym zgodnie z wyborem w menu.

Początkowo coś takiego jak poniżej

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form1());

Gdy użytkownik kliknie inną opcję w menu.

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form2());

Jeśli naprawdę chcesz użyć sposobu, w jaki obecnie korzystasz. Poniższy kod pomoże.

Dodaj właściwość Form1 dla Form2 i przeanalizuj wystąpienie form1 do Form2 za pomocą jego konstruktora.

public partial class Form2 : Form
    {
        private Form1 form1;

        public Form2(Form1 myForm)
        {
            InitializeComponent();
            form1 = myForm;
        }
    }

Pokaż formularz2 i ukryj formularz1.

private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2(this);
    Check.Show();
    Hide();
}

W zdarzeniu zamykającym form2 możesz teraz pokazać instancję form1, która jest w form2 i zamknąć form2.

Inną opcją jest użycie formularza MDI.

4
CharithJ 24 czerwiec 2011, 08:29

Od zadania tego pytania minęło 7 lat, ale chcę udzielić odpowiedzi na wypadek, gdyby ktoś nadal szukał rozwiązania. Jeśli używasz DevExpress, możesz dodać ramkę nawigacyjną do swojego programu. Możesz przełączać się między różnymi komponentami, takimi jak GridControl, GroupBox i tak dalej. Nie musisz więc tworzyć dodatkowego formularza, aby nawigować między formularzami.

0
Caner Özdemir 9 wrzesień 2018, 15:27