Jak zapobiec otwieraniu wielu formularzy?Zapobieganie wielokrotnym instancjom formularzy
Wykonuję .show w formularzu, ale użytkownik może ponownie kliknąć główny formularz i przycisk, a otworzy się kolejne wystąpienie formularza.
Jak zapobiec otwieraniu wielu formularzy?Zapobieganie wielokrotnym instancjom formularzy
Wykonuję .show w formularzu, ale użytkownik może ponownie kliknąć główny formularz i przycisk, a otworzy się kolejne wystąpienie formularza.
dwie opcje, w zależności od tego, co trzeba:
Zastosowanie ShowDialog
zamiast Show
, które zostanie otwarte okno modalne. Jest to oczywiste rozwiązanie, jeśli nie potrzebujesz, aby główny formularz był aktywny, gdy formularz dziecka jest otwarty.
Możesz też śledzić okno, które już otworzyłeś w głównym formularzu, i nie rób nic, jeśli jest już otwarte. Będzie to potrzebne, jeśli chcesz, aby użytkownik mógł korzystać z głównego formularza, gdy formularz podrzędny jest już otwarty, być może, aby otworzyć inne formularze.
Wyłącz główny formularz, aż formularz dziecka zniknie lub wyłącz przycisk.
button_onClick(object Sender, EventArgs e)
{
Button btn = sender as Button;
btn.Enabled = false;
Form myform = new MyForm();
myform.Show();
}
Oczywiście, to naprawdę powinien być używany form.ShowDialog()
zamiast form.Show()
jeśli chcesz modalne zachowanie.
zrobić coś takiego:
SingleForm myform = null;
void ShowMyForm_Click(object sender, EventArgs e)
{ if (myform == null)
{
myform = new SingleForm();
}
myform.Show();
myform.BringToFront();
}
zmusić obiektu formularza do przestrzegania Singleton
wolę używać generycznych i leniwy załadunku obsługiwać swoje formy. Ponieważ wszystkie moje formy dziedziczą po klasie bazowej, mogę użyć tej samej metody, aby wyprowadzić formularze na front, wysłać je na odwrót, zniszczyć, uruchomić itd.
Jeśli zachowasz klasę menedżera formularzy, odpowiedzialny za zarządzanie dowolnymi załadowanymi formularzami, możesz przynieść dowolną formę z przodu, którą chcesz, lub uniemożliwić określone formularze, aby mogły wrócić, o ile nie zostaną spełnione określone kryteria.
jest to lepsze rozwiązanie, ale nie zapobiega przypadkowemu lub celowemu ponownemu doprowadzeniu głównego formularza do przodu. –
nie powiedział, że główny formularz musiał pozostać w tle ... po prostu nie chciał, aby użytkownik mógł otworzyć inny formularz po kliknięciu przycisku ...;) Ale do edycji. .. oh ... Myślałem, że źle odczytałem. Myślałem, że istnieje druga forma, która została otwarta po kliknięciu przycisku ... idk – IAbstract
Zamierzałem dodać .ShowDialog() jako inną opcję, ale John K. i Johannes pobili mnie do tego – IAbstract