0

私は一種のスクリーンマネージャーに取り組んでいます、ここにコードがあります:

/// <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#はコンストラクターを別のスレッドなどにロードしますか?どうしたの?

[編集]ちなみに。ロード画面は私が追加したかったものです。画面マネージャーの残りの部分は問題なく動作するので、間違ってアプローチしている場合は、ロード画面全体を削除する可能性があります。

4

1 に答える 1

0

単純なRefresh()で問題が解決しました。

于 2012-11-24T11:44:18.277 に答える