【问题标题】:f2.show() method does not show the progress bar in form2f2.show() 方法在form2中不显示进度条
【发布时间】:2011-07-04 08:23:16
【问题描述】:

我有一个包含 2 个表单的应用程序。第一个是我完成所有工作的地方,第二个只是用于显示进度条。

我想从主窗体打开第二个。如果我使用

Form2 newForm = new Form2();
newForm.Show();

Form2在需要开闭的时候开闭,但是看不到进度条。我只能看到一个空白而不是它。

当我使用时

Form2 newForm = new Form2();
newForm.ShowDialog();

我可以看到进度条,但 Form2 在需要时不会关闭。它永远运行,我该怎么办?

我使用静态公共变量 closeForm 来关闭第二个表单。当我需要关闭我设置的表单时

closeForm = true;

在第二种形式中,我有一个计时器

private void timer1_Tick(object sender, EventArgs e)
{
    if (Form1.closeForm)
    {
        this.Dispose();
        this.Close();
        return;
    }
    else
    {
        progVal++;
        progressBar1.Value = (progVal % 100);
    }            
}

这是我放置 ProgressBar 值并关闭表单的地方。

当我使用 show 方法时,我只看到空白而不是 form2 中的控件。不只是进度条,我希望form1 关闭form2

【问题讨论】:

  • 您需要提供更多代码
  • 你是如何告诉你的 form2 在完成后关闭的?
  • 我编辑了关于如何关闭 form2 的问题
  • 尝试只调用this.Close();而不调用Dispose(),看看是否有帮助。
  • 而不是设置一个公共静态(全局状态通常是一个坏主意),为什么不简单地在表单上调用 close 呢?然后丢弃它

标签: c# .net winforms progress-bar modal-dialog


【解决方案1】:

首先你需要向进度条报告进度

 int iProgressPercentage = (int)(dProgressPercentage * 100);
 // update the progress bar
 progressBar1.ReportProgress(iProgressPercentage);

先尝试这样做,然后调用 this.close();

【讨论】:

    【解决方案2】:

    正如我在上面的评论中所说,您需要从这里Form.ShowDialog Method 检查模态对话框,我只是在那里引用以下表格:

    您可以使用此方法在应用程序中显示模式对话框。调用该方法时,其后的代码要等到对话框关闭后才会执行。

    为什么你在Form2Show(); 上看不到你的ProgressBar,你需要提供更多关于你如何处理它的信息,就像我将你的程序分成两部分并使用两个button click 一样运行它们(单击 button1 以显示 Form2;然后单击 button2 将其关闭)我可以看到您的预期结果:progressbar

    如果没有您的进一步信息,我最好的猜测是某些正在运行的东西会阻止 Form2 更新其 GUI。

    【讨论】:

    • 好的,当我使用按钮打开和关闭 form2 时。它适用于表演。我的应用程序上有一个按钮(在 form1 中)。它首先检查文本框是否已满,然后开始处理一些文件操作的进程。当我写 show();在 else 块中,(文件内容完成的地方)form2 中的控件不显示
    • 使用 BackgroundWorker (msdn.microsoft.com/en-us/library/…) 运行您的文件操作并更改 From2 的状态,因此这些进程/操作不会阻塞您的 GUI
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多