私は一種のスクリーンマネージャーに取り組んでいます、ここにコードがあります:
/// <summary>
/// Change the screen according to type
/// </summary>
/// <author>Kay van Bree</author>
/// <param name="type">Replacement screen type</param>
public void ChangeScreen(ScreenType type)
{
// Swap old screen with loading screen
ReplaceScreen(screen, new LoadingScreen(this));
UserControl newScreen;
// Get instance of correct screen
switch(type)
{
case ScreenType.login:
newScreen = new LoginScreen(this);
break;
case ScreenType.dashboard:
newScreen = new DashboardScreen(this);
break;
default:
newScreen = new LoginScreen(this);
break;
}
// Swap loading screen with new screen
ReplaceScreen(screen, newScreen);
Text = "Attendance Tracker | " + screen;
}
private void ReplaceScreen(UserControl oldScreen, UserControl newScreen)
{
Controls.Remove(oldScreen);
screen = newScreen;
// Initialize screen
newScreen.BackColor = Color.Transparent;
newScreen.Location = new Point((Size.Width - screen.Size.Width) / 2, (Size.Height - screen.Size.Height) / 2);
Controls.Add(newScreen);
}
この関数の目的は、別のUserControlを初期化しているときにロード画面を表示することです(画面はUserControlのサブクラスです)。UserControlが初期化されると、ロード画面が削除され、UserControlがコントロールに追加されます。
問題は、ロード画面(UserControlも)が表示されないことです。他のUserControlが初期化されるまで、コードは実行されません。
私は解決策を見つけることができないようです、または問題はまったくありません。この振る舞いを説明できますか?ロード画面に間違って近づいていますか?C#はコンストラクターを別のスレッドなどにロードしますか?どうしたの?
[編集]ちなみに。ロード画面は私が追加したかったものです。画面マネージャーの残りの部分は問題なく動作するので、間違ってアプローチしている場合は、ロード画面全体を削除する可能性があります。