ShowInTaskBar属性为false时,LoginForm自动隐藏或关闭

时间:2018-06-29 17:10:08

标签: c# forms winforms

我正在使用C#Winforms开发具有系统登录名的应用程序,该应用程序有两种形式,一种是主MainForm,另一种是用于登录LoginForm

此应用程序具有Modern Flat UI Design界面,因此它希望LoginForm form显示在MainForm表单的前面,不要在任务栏中显示其图标,并且不允许用户与MainForm进行交互以显示已使用方法ShowDialog();

LoginForm压缩代码:

public partial class LoginForm : Form
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        this.ShowInTaskbar = this.ShowIcon = false;
    }
}

MainForm压缩代码:

public partial class MainForm : Form
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        new LoginForm().ShowDialog();
        //new LoginForm().ShowDialog(this);
    }

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);

        //new LoginForm().ShowDialog();
        //new LoginForm().ShowDialog(this);
    }
}

我的问题是没有什么可以启动MainForm的过程,显示LoginForm大约2秒钟,然后将其隐藏,然后,我最小化MainForm来验证{{1 }}并未落后于LoginForm,但事实证明MainForm不存在。

如果我删除属性LoginForm,则一切正常,但是ShowInTaskbar = false;显示在任务栏中,这正是我所不希望的。

因此,如何在任务栏上没有出现LoginForm的情况下在LoginForm前面显示我的MainForm

注意: 是的,虽然LoginForm尚未关闭,但用户无法与LoginForm进行交互,并且关闭MainForm的唯一方法是正确记录日志或单击按钮关闭{{1 }}呼叫LoginForm

此外,我尝试隐藏LoginFormApplication.Exit();开头,但同样MainForm消失了。

2 个答案:

答案 0 :(得分:1)

在对话框的构造函数中设置ShowInTaskBarShowIcon

public partial class LoginForm : Form
{
    public LoginForm()
    {
        InitializeComponent();
        this.ShowInTaskbar = false;
        this.ShowIcon = false;
    }
}

然后以主要形式的Shown方法显示它:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }
    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
        new LoginForm().ShowDialog();
    }
}

答案 1 :(得分:0)

您可以尝试将登录表单的父级设置为主表单。