【发布时间】:2013-12-22 21:03:30
【问题描述】:
我想让每 30% 的进度条,文本发生变化。
我想要做的是,当进度条达到 25% 时,文本发生变化并停止一秒钟,然后又回到 50,然后文本再次发生变化,它一直持续到达到 100%。
这是我的代码:
public WelcomeScreen()
{
InitializeComponent();
_timer.Interval = 2000;
label1.ForeColor = Color.White;
}
private void WelcomeScreen_Load(object sender, EventArgs e)
{
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.ProgressChanged += worker_ProgressChanged;
worker.RunWorkerAsync();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var percentComplete = e.ProgressPercentage;
var userState = (string)e.UserState;
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Value = 100;
progressBar1.Step = 25;
if (progressBar1.Step <= 25)
{
label1.Text = "Preparing Setup";
}
else if (progressBar1.Step <= 50)
{
label1.Text = "Preparing Application";
}
else if (progressBar1.Step <= 75)
{
label1.Text = "Preparing Database";
}
else if (progressBar1.Step <= 100)
{
label1.Text = "Preparing Contents";
}
else
{
label1.Text = "Launch Application";
}
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_timer.Enabled = true;
_timer.Tick += new EventHandler(Timer_Tick);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
var currentWorker = (BackgroundWorker)sender;
currentWorker.ReportProgress(0, "Preparing Setup");
currentWorker.ReportProgress(25, "Preparing Application");
currentWorker.ReportProgress(50, "Preparing Database");
currentWorker.ReportProgress(75, "Preparing Contents");
currentWorker.ReportProgress(100, "Launch Application");
}
void Timer_Tick(object sender, EventArgs e)
{
_timer.Enabled = false;
this.Hide();
_login.ShowDialog();
this.Close();
}
当进度条达到 100% 时,我命令应用程序等待 2 秒,然后在文本更改为“启动应用程序”后显示另一个表单。
【问题讨论】:
-
那么你为什么要检查
progressBar1.Step的值是多少?你为什么要使用它?只需将Value设置为等于percentComplete? -
我想做的是,当进度条达到 25% 时,文本发生变化并停止一秒钟,然后又回到 50,文本再次发生变化,一直持续到先生,它达到了100%。这就是为什么我设置了
progressBar1.Step的值,但文本保持在Preparing Setup -
您不需要使用该属性。让 BackgroundWorker 决定进度条的值。
-
那么,先生,我必须做什么才能更改文本,
progressBar.Step的每个值都达到 25% 和 50% 等等?我想显示该文本。
标签: c# winforms timer progress-bar