进度条百分比完成c#项目后显示新表单

时间:2011-03-09 14:50:24

标签: c#

我正在使用Visual Studio(c#)开发一个项目。当我使用进度条安装我的应用程序时,我想创建一个启动表单。完成进度条后,应隐藏此表单并打开新表单。你可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

  1. 创建表单并添加进度条
  2. 在应影响进度条的表单部分设置事件处理程序
  3. 更新progree栏以反映已完成的工作量
  4. 表单完成后关闭它

答案 1 :(得分:0)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int d;

            for (d = 0; d <= 100; d++)
                progressBar1.Value = d;

            this.Hide();
            Form1().Show();


            timer1.Enabled = false;
        }
    }
}

答案 2 :(得分:0)

编辑:

我刚刚制作了一个示例应用程序,试图使用您指定的代码。除了一个调整之外,它工作正常:

Form1().Show();应为new Form1().Show();

此代码无法执行的唯一方法是,如果您忘记在设计视图中将timer1设置为enabled状态,导致代码永远不会启动。

您确定代码正在启动吗?你在这段代码上做了一个断点吗?

旁注: timer1不在单独的线程上,因此您不需要使用Invoke(您可以通过查看控件的InvokeRequired属性来查看是否确实需要它)

建议的改进:如果您不打算再次使用Form2并根据您的代码判断,很可能您不会;也许你应该在Form2而不是Close()上调用Hide()并释放资源。我有时候我的应用程序一直在后台运行,因为我隐藏了表单但从未关闭它,应用程序在“最后一个窗口关闭时退出”,从未发生过。

所以可以肯定的是,这是在我的机器上运行的最终代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

            //enable timer1 here or in designer
            timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //disable timer1 first thing, otherwise it can end up ticking
            //multiple times before you've had a chance to disable it
            //if the timespan is really short
            timer1.Enabled = false;

            int d;

            for (d = 0; d <= 100; d++)
                progressBar1.Value = d;

            Hide();

            //create a new Form1 and then show it
            new Form1().Show();
        }
    }
}