2012-05-18 3 views
1

Я хочу показать пользователю WaitForm и тем временем сделать длинную операцию фона.Показать Devexpress WaitForm как диалог

Я использую Thread для этой работы и получаю уведомление, используя событие, когда работа была выполнена.

В этом сценарии я хочу интегрировать DevExpress WaitForm.

Эта форма может быть показана, когда задание начнется (изнутри или снаружи потока) и может быть остановлено при срабатывании события завершения.

.ShowWaitForm от SplashScreenManager просто показывает форму. Как я могу заставить форму отбрасывать оконные сообщения во время ожидания?

Например: Я не хочу, чтобы пользователь мог нажимать кнопки и прочее во время ожидания.

ответ

1

Вы можете использовать это;

SplashScreenManager.ShowForm(typeof(WaitForm1)); 
........ 
your code 
........ 
SplashScreenManager.CloseForm(); 
1

Вы должны создать свою унаследованную форму и переопределить 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; 
     } 
    } 
} 

Здесь MyWaitForm, как показано в конструкторе Visual Studio: enter image description here

После этого вы будете использовать образец кода 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); 
     } 
    } 
} 
Смежные вопросы