我已经显示了一个启动画面,它工作正常,但主窗体不会显示在任务栏和焦点上。
有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。为什么???
问题出在哪里?
答案 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));
}
}