我有SplashScreen
,MainForm
。
在我的MainForm_Load
我有一个名为Connect();
的方法。这种方法可以验证我的RFID设备与SerialPort的连接,并且需要几秒钟才能完成。
当它通过Connect()
方法时,我想显示我的SplashScreen
。我试过这个:
private void Main_Load(object sender, EventArgs e)
{
Frm_Splash s = new Frm_Splash();
s.Show();
Connect();
}
Connect();
方法,使用MessageBox
显示消息。
但是当SplashScreen
结束时,它会自我消失并关闭MessageBox。
这是我的SplashScreen
表单代码:
private void timer1_Tick(object sender, EventArgs e)
{
if (pbLoad.Value < 100)
{
pbLoad.Value = pbLoad.Value + 1;
}
else
{
timer1.Enabled = false;
this.Close();
}
}
我知道它与this.Close();
有关。我只是不知道如何解决它。
也许如果我使用this.Visible = false
,但SplashScreen
不会关闭,它仍然会处理,只是看不见......我认为有更好的选择。
答案 0 :(得分:4)
我想您正在使用MessageBox.Show()
打开邮箱...
而不是这个,请使用MessageBox.Show(this,"message");
我想现在发生的事情是你的留言箱父设置为启动画面,因为那是一个有焦点的对话框
答案 1 :(得分:1)
这是我的启动画面:
namespace MyNamespace
{
public partial class frmSplashScreen : Form
{
private static frmSplashScreen splashScreen = null;
private static Thread splashThread = null;
private Double opacityInc = .03;
private Double opacityDec = .1;
private const Int32 iTimerInterval = 30;
public frmSplashScreen()
{
InitializeComponent();
Opacity = .0;
timer1.Interval = iTimerInterval;
timer1.Start();
}
private void frmSplashScreen_Load(Object sender, EventArgs e)
{
CenterToScreen();
}
public static void ShowSplashScreen()
{
if (splashScreen != null)
return;
splashThread = new Thread(new ThreadStart(frmSplashScreen.ShowForm));
splashThread.IsBackground = true;
splashThread.SetApartmentState(ApartmentState.STA);
splashThread.Start();
}
private static void ShowForm()
{
splashScreen = new frmSplashScreen();
Application.Run(splashScreen);
}
public static void CloseForm()
{
if (splashScreen != null)
splashScreen.opacityInc = -splashScreen.opacityDec;
splashThread = null;
splashScreen = null;
}
private void timer1_Tick(Object sender, EventArgs e)
{
if (opacityInc > 0)
{
if (Opacity < 1)
Opacity += opacityInc;
}
else
{
if (Opacity > 0)
Opacity += opacityInc;
else
Close();
}
}
}
}
我通过在表单的构造函数中调用它来激活它,我希望它从中弹出:
frmSplashScreen.ShowSplashScreen();
然后在相同表格的Shown
中关闭它:
frmSplashScreen.CloseForm();
注意:我之所以这样,是因为它使用了static
个类,这有助于缓解所有权问题。