Jestem nowicjuszem w C# i formie okienkowej, robię projekt i napotykam jakiś problem
- 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();
}
}
3 odpowiedzi
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();
}
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.
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.
Podobne pytania
Powiązane pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.