怎么样显示这样一个对话框? 很多程序在开始的时候先显示一个对话框一段时间。例如“XXX系统”,然后跳到主窗体。请问这个是怎么实现的,最好给个代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那个是Flash窗体.一般是为了界面友好在加载程序时显示出来的 如果你的程序启动很快的话.只要在做一个这样的窗体,放一个Timer控件在里面.Timer_Tick(...){ this.Close();}然后Main()函数这样写:FlashForm frmFlash = new FlashForm();frmFlash.ShowDialog();Application.Run(new Form1()); 新建一个对话框窗体,FormBorderStyle设为None,设对话框窗体Name为FlashForm,主窗体为MainForm,MainForm为启动窗体。在MainForm的Load事件中写:private void MainForm_Load(object sender, EventArgs e){ FlashForm A = new FlashForm(); A.Show(); Thread.Sleep(3000); A.Close();} 呵呵,好像不行,因为显示模态窗口,动画是静止的可以用Applaction.Run()或是创建新的Domain Thread.Sleep()是让一个线程暂停的方法,使用要先添加using语句using System.Threading;Thread.Sleep(3000)中的3000为暂停的毫秒数,越大停得越久。 这是一个启动封面,可以参见秋枫给我的参考地址,我很受启发,需要自己做一个类http://www.codeproject.com/netcf/casoast.asp?target=splashFormhttp://www.codeproject.com/csharp/apploadingarticle.asp?target=splashFormhttp://www.codeproject.com/csharp/ApplicationContextSplash.asp?target=splashForm这是我的启动类 #region 应用程序的主入口点 /// <summary> /// 应用程序的主入口点。 ///FormMain是主界面 ///Splash启动封面 /// </summary> public static void Main() { SplashAppContext myContext = new SplashAppContext(new FormMain(),new Splash()); Application.Run(myContext); } #endregion public class SplashAppContext : ApplicationContext { Form mainForm = null; Form splashForm = null; public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm) { this.mainForm = mainForm; this.splashForm = splashForm; } protected override void OnMainFormClosed(object sender, EventArgs e) { if (sender==splashForm) { base.MainForm = this.mainForm; } else if (sender==mainForm) { base.OnMainFormClosed(sender, e); } } }} 我很迷惑!但还是忍不住要问:到底是FlashForm还是SplashScreen(.net 2.0之后才有)?还有就是frmFlash.ShowDialog之后的Application.Run(new Form1());必须要等frmFlash关闭之后才能运行,这样的话能实现SplashScreen的效果吗?请不要误导他人! 按照生铁的方法做了之后发现放在form上的picturebox的图片显示不出来。 当SplashAppContext myContext = new SplashAppContext(new FormMain(),new Splash())运行时,启动界面和主界面已经实例化了,只是你在什么时候调用FormMain.Show().我的部分代码如下,我这里有一个MainApp类,它实例化启动封面和主界面,当启动封面启动一定时间后,将主界面显示,然后再关闭启动封面,你应在启动封面内用定时器的方法调用MainApp.getFormMain().Show(),注意启动封面的TopMost属性设为True,并设置它的Opacity属性,使启动封面淡入淡出.namespace MyApp{ /// <summary> /// MainApp 的摘要说明。 /// </summary> public class MainApp { //饿汉式单例 private static FormMain formMain=new FormMain(); private static Start start=new Start(); //私有构造子 private MainApp() {} public static FormMain getFormMain() { return formMain; } public static Start getStart() { return start; } public static WaringForm getWaringForm() { return waringForm; } //入口 #region 应用程序的主入口点 /// <summary> /// 应用程序的主入口点。 /// </summary> public static void Main() { SplashAppContext myContext = new SplashAppContext(MainApp.getFormMain(), MainApp.getStart()); Application.Run(myContext); //Application.Exit(); } #endregion } public class SplashAppContext : ApplicationContext { Form mainForm = null; Form splashForm = null; public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm) { this.mainForm = mainForm; this.splashForm = splashForm; } protected override void OnMainFormClosed(object sender, EventArgs e) { if (sender==splashForm) { base.MainForm = this.mainForm; } else if (sender==mainForm) { // MainApp.getWaringForm().Close(); base.OnMainFormClosed(sender, e); } } }} 刚才的代码中请去掉 public static WaringForm getWaringForm() { return waringForm; } 先说声sorry JimFire(阿达),上面我的代码我没测试过,刚刚测试了一下,确实是不行。sorry高深的方法我不会,不过简单的方法想了一个。试过了,可以实现。两个窗体,FlashForm MainForm 两个窗体的StartPosition都为CertenScreen(窗体居中显示)在FlashForm中加一个timer控件,FlashForm的Opacity属性改为0%(使窗体透明),然后->给FlashForm添加两个整型的变量,用来记录FlashForm出现的时间。public class FlashForm : Form{ private int startTime; private int endTime;}MainForm的Load事件中写private void MainForm_Load(object sender, EventArgs e){ FlashForm A = new FlashForm(); A.ShowDialog();}FlashFormLoad事件中写private void FlashForm_Load(object sender, EventArgs e){ startTime = Environment.TickCount; this.timer1.Enabled = true;}timer控件Tick事件中写private void timer1_Tick(object sender, EventArgs e){ this.Opacity += 0.05; endTime = Environment.TickCount; if (endTime - startTime > 5000) this.Close();} 我的程序要在.net 1.1下运行,2.0版本的东西目前用不着,感谢大家给我提的方法。 关于多线程的Lock的问题 Winform用POST提交参数,返回的XML格式的字符串 c# 如何创建一个新的进程 怎么报空引用啊 100分问两个小问题 怎么在另一个项目中调用一个做好的用户控件 入门问题 解码后出现乱码,正常中文加乱码,请高人指教! 小弟急求,导出 Excel 并加密 方法~!! 新手求助 C#关于调用C++的DLL 头文件。h等问题 求教关于Windows Media Player控件的问题,急 [编译后exe安全吗?] 不用Reflector.exe就知道你开发时文件结构
只要在做一个这样的窗体,放一个Timer控件在里面.
Timer_Tick(...)
{
this.Close();
}然后Main()函数这样写:
FlashForm frmFlash = new FlashForm();
frmFlash.ShowDialog();Application.Run(new Form1());
设对话框窗体Name为FlashForm,主窗体为MainForm,MainForm为启动窗体。
在MainForm的Load事件中写:private void MainForm_Load(object sender, EventArgs e)
{
FlashForm A = new FlashForm();
A.Show();
Thread.Sleep(3000);
A.Close();
}
可以用Applaction.Run()或是创建新的Domain
Thread.Sleep(3000)中的3000为暂停的毫秒数,越大停得越久。
http://www.codeproject.com/csharp/apploadingarticle.asp?target=splashForm
http://www.codeproject.com/csharp/ApplicationContextSplash.asp?target=splashForm这是我的启动类
#region 应用程序的主入口点
/// <summary>
/// 应用程序的主入口点。
///FormMain是主界面
///Splash启动封面
/// </summary>
public static void Main()
{
SplashAppContext myContext = new SplashAppContext(new FormMain(),new Splash());
Application.Run(myContext);
} #endregion
public class SplashAppContext : ApplicationContext
{
Form mainForm = null;
Form splashForm = null; public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm)
{
this.mainForm = mainForm;
this.splashForm = splashForm;
}
protected override void OnMainFormClosed(object sender, EventArgs e)
{
if (sender==splashForm)
{
base.MainForm = this.mainForm;
}
else if (sender==mainForm)
{
base.OnMainFormClosed(sender, e);
}
}
}
}
到底是FlashForm还是SplashScreen(.net 2.0之后才有)?还有就是frmFlash.ShowDialog之后的Application.Run(new Form1());必须要等frmFlash关闭之后才能运行,这样的话能实现SplashScreen的效果吗?
请不要误导他人!
我的部分代码如下,我这里有一个MainApp类,它实例化启动封面和主界面,当启动封面启动一定时间后,将主界面显示,然后再关闭启动封面,你应在启动封面内用定时器的方法调用MainApp.getFormMain().Show(),注意启动封面的TopMost属性设为True,并设置它的Opacity属性,使启动封面淡入淡出.namespace MyApp
{
/// <summary>
/// MainApp 的摘要说明。
/// </summary>
public class MainApp
{
//饿汉式单例
private static FormMain formMain=new FormMain();
private static Start start=new Start(); //私有构造子
private MainApp()
{} public static FormMain getFormMain()
{
return formMain;
}
public static Start getStart()
{
return start;
}
public static WaringForm getWaringForm()
{
return waringForm;
} //入口
#region 应用程序的主入口点
/// <summary>
/// 应用程序的主入口点。
/// </summary>
public static void Main()
{
SplashAppContext myContext = new SplashAppContext(MainApp.getFormMain(), MainApp.getStart());
Application.Run(myContext);
//Application.Exit();
} #endregion }
public class SplashAppContext : ApplicationContext
{
Form mainForm = null;
Form splashForm = null; public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm)
{
this.mainForm = mainForm;
this.splashForm = splashForm;
}
protected override void OnMainFormClosed(object sender, EventArgs e)
{
if (sender==splashForm)
{
base.MainForm = this.mainForm;
}
else if (sender==mainForm)
{
// MainApp.getWaringForm().Close();
base.OnMainFormClosed(sender, e);
}
}
}
}
public static WaringForm getWaringForm()
{
return waringForm;
}
高深的方法我不会,不过简单的方法想了一个。试过了,可以实现。两个窗体,FlashForm MainForm 两个窗体的StartPosition都为CertenScreen(窗体居中显示)
在FlashForm中加一个timer控件,FlashForm的Opacity属性改为0%(使窗体透明),然后->给FlashForm添加两个整型的变量,用来记录FlashForm出现的时间。
public class FlashForm : Form
{
private int startTime;
private int endTime;
}MainForm的Load事件中写
private void MainForm_Load(object sender, EventArgs e)
{
FlashForm A = new FlashForm();
A.ShowDialog();
}FlashFormLoad事件中写
private void FlashForm_Load(object sender, EventArgs e)
{
startTime = Environment.TickCount;
this.timer1.Enabled = true;
}timer控件Tick事件中写
private void timer1_Tick(object sender, EventArgs e)
{
this.Opacity += 0.05;
endTime = Environment.TickCount;
if (endTime - startTime > 5000)
this.Close();
}