进度条应限制要单击的主窗口上的按钮

本文关键字:窗口 按钮 单击 | 更新日期: 2023-09-27 17:58:52

单击按钮后,我会显示进度表并启动任务。我想禁用该按钮或使进度窗体成为模式,这样在进度完成之前,主窗体上的任何内容都不应该是可点击的。

当调用进度条窗体的ShowDialog:时,我尝试将所有者引用作为参数传递

m_oProgressBarForm = new ProgressBarForm();
m_oProgressBarForm.ShowDialog(this);

请帮助我如何通过使主窗口变灰或使按钮不可点击或使进度条窗口成为模式来防止用户再次点击按钮?

目前,用户可以再次单击按钮,然后启动另一个实例,这使得应用程序不可用,并且必须使用任务管理器手动终止应用程序。

进度条应限制要单击的主窗口上的按钮

如果使用ShowDialog()显示窗体,则在对话框关闭后才会执行下面的代码。但您可能需要显示进度条表单,然后执行一些操作,然后关闭该表单。您不能将进度表显示为模态。

相反,您可以通过将主窗体设置为其父窗体来禁用主窗体和显示进度窗体,然后执行耗时的任务,最后关闭进度窗体并启用主窗体:

private async void Button1_Click(object sender, EventArgs e)
{
    var f = new Form(); //Your progress form
    f.Show(this);
    this.Enabled = false;
    try
    {
        //For example a time-consuming task
        await Task.Delay(5000);
    }
    catch (Exception ex)
    {
        //Handle probable exceltions
    }
    f.Close();
    this.Enabled = true;
    this.BringToFront();
}