我正在开发一种屏幕管理器,这是代码:
/// <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#是否在不同的线程或其他东西中加载构造函数?有什么问题?
[编辑]顺便说一下。加载屏幕只是我想要添加的内容。屏幕管理器的其余部分工作得很好,所以如果我接近错误,我可能会放弃整个加载的东西。
答案 0 :(得分:0)
一个简单的Refresh()解决了我的问题。