Czytam, że zdarzenie Load
powinno zostać wywołane po utworzeniu klamki okna, ale okno staje się widoczne. W większości przypadków wydaje się to prawdą. Jednak odkryłem, że po utworzeniu formularza z ustawieniem właściwości WindowState
na FormWindowState.Maximized
(przez projektanta VS lub programowo w konstruktorze), okno staje się widoczne przed wywołaniem zdarzenia Load
. Na przykład:Ustawienie WindowState na zmaksymalizowane powoduje, że okno pojawia się zbyt wcześnie
using System;
using System.Windows.Forms;
namespace MyApplication
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
WindowState = FormWindowState.Maximized;
}
protected override void OnLoad(EventArgs e)
{
MessageBox.Show("OnLoad - notice that the window is already visible");
base.OnLoad(e);
}
}
}
To z kolei powoduje, że wyświetlany formularz migotać dużo podczas jego kontrole (które są określone w trakcie imprezy Form.Load
) są zmniejszane, gdy okno jest widoczne. Jeśli nie ustawiłem stanu, który ma być zmaksymalizowany, wówczas wszystkie zmiany rozmiaru są wykonywane przed wyświetleniem okna (co jest tym, czego oczekiwałbym).
Mogłem wstrzymać się przy ustawianiu WindowState
do końca zdarzenia Load
, ale to nadal powoduje migotanie, ponieważ okno staje się widoczne, a następnie wszystkie rozmiary kontrolek są zmieniane.
Jakieś myśli?
że 'MessageBox.Show' w przypadku obciążenia zmusi formularz, aby pokazać. – LarsTech
Zmiana rozmiaru elementów sterujących w przypadku zdarzenia "Wczytaj" jest dość podejrzana. Dlaczego nie polegasz na wbudowanych mechanizmach zmiany wielkości kontrolek, takich jak właściwości 'Dock' lub' Anchor' lub 'TableLayoutPanel'? Czy ręcznie zmienisz rozmiar kontrolek, gdy później ręcznie zmienisz rozmiar okna? –
Dostaję to również. Zapisuję WindowState między sesjami użytkowników, aby można było zmienić rozmiar formularza, itp., Do tego, co wcześniej miał użytkownik, a kiedy ustawiłem WindowState na Maximized, dostaję dużo migotania, itp. Czy istnieje rozwiązanie, aby to naprawić? –