1

我想WaitForm在用户中显示一个,同时做一个很长的后台操作。

我将 aThread用于这项工作,并在工作完成时使用事件得到通知。

在这种情况下,我想集成一个 DevExpress WaitForm。

此表单可以在作业将要开始时显示(从线程内部或外部),并且可以在完成事件触发时停止。

.ShowWaitFormfrom只是显示SplashScreenManager表格。如何让表单在等待时丢弃窗口消息?

例如:我不希望用户在等待时能够单击按钮和东西。

4

3 回答 3

2

您必须创建继承的表单并覆盖 SetDescription() 和 SetCaption()。您将根据自己的喜好使用一些图标或动画 gif 来装饰表单。在下面的示例中,我创建了一个名为 MyWaitForm 的表单,并简单地放置了两个标签来显示描述和标题文本。

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 DXApplication1
{
    public partial class MyWaitForm : DevExpress.XtraWaitForm.WaitForm
    {
        public MyWaitForm()
        {
            InitializeComponent();
        }

        public override void SetDescription(string description)
        {
            base.SetDescription(description);

            lbDescription.Text = description;
        }

        public override void SetCaption(string caption)
        {
            base.SetCaption(caption);

            lbCaption.Text = caption;
        }
    }
}

这里是 Visual Studio 设计器中所示的 MyWaitForm: 在此处输入图像描述

之后,您将使用 Devexpress 代码示例来显示 WaitForm

https://documentation.devexpress.com/#WindowsForms/CustomDocument10832

但是将您的 MyWaitForm 类类型传递给 SplashScreenManager.ShowForm() 方法:

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;
using DevExpress.XtraSplashScreen;
using System.Threading;

namespace WaitForm_SetDescription {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void btnShowWaitForm_Click(object sender, EventArgs e) {
            //Open MyWaitForm!!!
            SplashScreenManager.ShowForm(this, typeof(MyWaitForm), true, true, false);

            //The Wait Form is opened in a separate thread. To change its Description, use the SetWaitFormDescription method.
            for (int i = 1; i <= 100; i++) {
                SplashScreenManager.Default.SetWaitFormDescription(i.ToString() + "%");
                Thread.Sleep(25);
            }

            //Close Wait Form
            SplashScreenManager.CloseForm(false);
        }
    }
}
于 2015-10-09T15:51:53.597 回答
1

据我所知,WaitForm 的当前实现不允许它显示为对话框。我找到了提供此功能的建议:SplashScreenManager - 提供将 WaitForm 显示为模式对话框的功能。因此,您可以跟踪它。

于 2012-05-21T07:57:43.433 回答
1

你可以这样使用;

SplashScreenManager.ShowForm(typeof(WaitForm1));
........
your code
........
SplashScreenManager.CloseForm();
于 2014-01-26T16:50:17.043 回答