我有3种形式-主要形式是Form1,其他形式是启动形式,然后是登录屏幕。
启动屏幕首先显示,然后填充服务器。然后,显示frmAppLogin,用户输入一个硬编码的密码,结果返回到form1。
public Form1()
{
_assembly = Assembly.GetExecutingAssembly();
Stream icon = _assembly.GetManifestResourceStream.....
this.Icon = new Icon(icon);
Thread t = new Thread(new ThreadStart(SplashScreen));
t.Start();
InitializeComponent();
PopulateServers();
//Thread.Sleep(800);
Form frmLogin1 = new frmAppLogin();
t.Abort();
frmLogin1.ShowDialog();
DialogResult res = new DialogResult();
res = frmLogin1.DialogResult;
if (res == DialogResult.OK)
{
_LoggedIn = true;
}
else
{
_LoggedIn = false;
}
}
这是form1_load的代码:
private void Form1_Load(object sender, EventArgs e)
{
if (_LoggedIn)
{
try
{
blah blah........
}
catch
{
MessageBox.Show("Error accessing resources!");
}
}
else
{
this.Close();
}
}
以及登录表单的代码:
public frmAppLogin()
{
InitializeComponent();
this.WindowState = FormWindowState.Normal;
}
private void btnAppLogin_Click(object sender, EventArgs e)
{
if (txtAppPass.Text.ToString() == requiredPass)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
txtAppPass.Clear();
txtAppPass.Focus();
MessageBox.Show("Incorrect Password");
}
}
问题是,启动画面消失时,登录表单会弹出一秒钟,但会立即最小化到任务栏。
起始位置通过GUI设置为CenterScreen和WindowState Normal。
同样,仅当我在调试文件夹即I.E.中运行application.exe或从中复制应用程序时,才会发生这种情况。当我在Visual Studio 2010中调试时,它不会发生。
编辑:只是为了添加此,我也尝试过:
private void frmAppLogin_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
这没有帮助。
最佳答案
我很确定您正在诊断此错误。对话框没有最小化,它消失在另一个应用程序的窗口后面。通常是Visual Studio,每个人都将其最大化,因此它非常擅长覆盖其他窗口。最小化其他窗口以查找对话框。
出问题的是,一瞬间,您的应用程序没有Windows可以关注的任何窗口。实际上是两次,在初始屏幕和登录表单之间。再次在登录表单和您的主表单之间。 Windows窗口管理器被迫寻找另一个要聚焦的窗口,并且由于您没有任何候选者,它将选择另一个应用程序的窗口。
窗口管理器允许给应用程序一些时间来创建其第一个窗口,这不可避免地要花费时间。您的启动屏幕无疑会弄乱这种逻辑。所发布的代码不容易修复,在调用ShowDialog()之后调用代码的标准技巧将不起作用,因为您的应用尚未启动消息循环。这本身就是一个问题。至少通过修复启动屏幕来开始解决此问题,.NET已经内置了对它们的可靠支持。回答is here。
关于c# - 表格开始最小化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11863791/