我有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/

10-12 14:21