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 被初始化时,它会移除 Loading 屏幕并将 UserControl 添加到控件中。

问题是我的加载屏幕(也是一个用户控件)不会出现。在其他 UserControl 初始化之前,它不会执行任何代码。

我似乎找不到解决方案,或者根本找不到问题所在。你能解释一下这种行为吗?我是否错误地接近加载屏幕?C# 是否在不同的线程中加载构造函数?有什么问题?

[编辑]顺便说一句。加载屏幕只是我想添加的东西。屏幕管理器的其余部分工作得很好,所以如果我处理错了,我可能会放弃整个加载。

4

1 回答 1

0

一个简单的 Refresh() 解决了我的问题。

于 2012-11-24T11:44:18.277 回答