启动画面C#winform后,主窗体不会显示在任务栏上

时间:2016-01-20 17:46:34

标签: c# winforms

我已经显示了一个启动画面,它工作正常,但主窗体不会显示在任务栏和焦点上。

有2种形式 1. SplashScreen 2. formMain

在启动画面上,我添加了一个计时器并在下面执行了一些代码。

public SplashScreen()
        {
            InitializeComponent();
        }

        private void splashtimer_Tick(object sender, EventArgs e)
        {
            progressBar1.Increment(1);
            if (progressBar1.Value == 100) splashtimer.Stop();
        }

在主窗体“formMain”

我添加了以下代码。

public formMain()
    {
        this.ShowInTaskbar = true;
        Thread t = new Thread(new ThreadStart(ShowSplashScreen));
        t.Start();
        Thread.Sleep(5000);
        InitializeComponent();
        t.Abort();


    }

    public void ShowSplashScreen()
    {
        Application.Run(new SplashScreen());            
    }

启动画面工作正常,但主窗体不会聚焦。我从Debug文件夹运行EXE并运行它,显示初始屏幕并且未播放主窗体。任务栏图标未显示。在Ctrl + Tab中,将显示formMain。为什么???

问题出在哪里?

2 个答案:

答案 0 :(得分:0)

尝试使用此代码显示启动画面:

    private void formMain_Load(object sender, EventArgs e)
    {
        EventHandler activated = null;
        activated = (s2, e2) =>
        {
            this.Activated -= activated;
            this.ShowInTaskbar = true;
            var splash = new SplashScreen();
            splash.ShowInTaskbar = false;
            splash.Show();
            var timer = new System.Windows.Forms.Timer();
            EventHandler tick = null;
            tick = (s3, e3) =>
            {
                timer.Enabled = false;
                timer.Tick -= tick;
                timer.Dispose();
                splash.Close();
                splash.Dispose();
            };
            timer.Tick += tick;
            timer.Interval = 5000;
            timer.Enabled = true;
        };
        this.Activated += activated;
    }

答案 1 :(得分:0)

  

启动画面工作正常,但主窗体不会聚焦。我跑EXE   从Debug文件夹中运行它,显示初始屏幕和主窗体   没播种。任务栏图标未显示。在Ctrl + tab中,formMain是   所示。为什么???

我试过VS 2015,我的formMain和SplashScreen运行正常,除非你注意到,formMain没有集中注意力。这可能是因为你在创建和聚焦formMain之后使用Application.Run来关注SplashScreen。

在任何一种情况下,你的方法都不是那么干净。试试我在下面的方式。这也将解决焦点问题

public partial class SplashScreen : Form {

    public SplashScreen() {
        InitializeComponent();
        progressBar1.Style = ProgressBarStyle.Marquee;
    }

}

public partial class formMain : Form {
    public formMain(Form splash) {
        InitializeComponent();

        // make sure to keep yielding to GUI updates, else your progressbar will nto refresh
        for (int i = 0; i < 100; ++i) {
            Thread.Sleep(100); // do some work
            Application.DoEvents();
        }

        splash.Close();

    }
}

static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var frm = new SplashScreen();
        frm.Show();

        Application.Run(new formMain(frm));

    }
}