我正在开发一种屏幕管理器,代码如下:
/// <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# 是否在不同的线程中加载构造函数?有什么问题?
[编辑]顺便说一句。加载屏幕只是我想添加的东西。屏幕管理器的其余部分工作得很好,所以如果我处理错了,我可能会放弃整个加载。