启动画面显示在应用程序中间

时间:2013-02-06 03:47:19

标签: c# winforms

我有一个在ReportViewer控件中显示为Tree层次结构的报表名称列表。当用户单击报表名称时,会加载输入表单,用户输入一些值并按“确定”。此时,Splash屏幕应在后端进程发生时加载(连接到DB,检索值等)。在Reportviewer编辑器中加载报表后,应该关闭启动画面。

到目前为止,我能够显示启动画面,但是当时它被卡住了,实际的报告没有加载,并且启动画面永远保持不变。

是否可以在应用程序中使用splashscreen,而不是在应用程序启动时使用?如果是,我该如何继续加载报告?

static class Program
{
    [STAThread]
    static void Main(string[] args)

    {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new SnapPlusReports());

        //new SplashScreenApp().Run(args);
    }
}

public class SplashScreenApp : WindowsFormsApplicationBase
{
    private static SplashScreenApp _application;

    public static void Run(Form form)
    {
        _application = new SplashScreenApp { MainForm = form };
        _application.Run(Environment.GetCommandLineArgs());
    }

    protected override void OnCreateSplashScreen()
    {
        this.SplashScreen = new ShowProgress();
        base.OnCreateSplashScreen();
    }

}

2 个答案:

答案 0 :(得分:0)

之前我已经通过在运行时使用代码动态创建新表单来完成此操作。确保将所有选项设置为up,尤其是FormBorderStyle为none,或类似的设置,以便用户无法关闭它。然后,只需操作显示在该表单上的标签,并在处理完成后最终将其关闭。 这样您就不必担心线程,并且一个好的副作用是初始表单不可点击。

例如,我有一个在运行时弹出的表单(授予我不会改变它的任何内容,但想法就在那里:

AboutForm aboutForm = new AboutForm();
aboutForm.StartPosition = FormStartPosition.CenterParent;
Label lblAbout = new Label();
Version applicationVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
lblAbout.Text = applicationVersion.ToString();
lblAbout.Location = new Point(145,104);
aboutForm.Controls.Add(lblAbout);
aboutForm.ShowDialog();

这显示当前程序的版本号等。表单上已经存在其他标签(我先在视觉上创建它,然后调用它的实例)。

希望这有帮助!

答案 1 :(得分:0)

...如果您在指定时间内只需要一份应用程序副本,请抓住其他实例并优雅退出

static void Main()
{
    Application.EnableVisualStyles();
    bool exclusive;
    System.Threading.Mutex appMutex = new System.Threading.Mutex(true, "MY_APP", out exclusive);
    if (!exclusive)
    {
         MessageBox.Show("Another instance of xxxx xxxBuilder is already running.","MY_APP",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation );
                    return;
    }
    Application.SetCompatibleTextRenderingDefault(false);
    xxxWindowsApplication.InitializeApplication();
    Application.Run(new frmMenuBuilderMain());
                GC.KeepAlive(appMutex);
            }

在主表单加载中,您可以执行以下操作:

private void frmMenuBuilderMain_Load(object sender, EventArgs e)
{   

     //Show Splash with timeout Here--
     if(!SystemLogin.PerformLogin())             
     {
         this.Close();
         return;
     }
     tmrLoad.Enabled = true;

}