覆蓋表單
覆蓋表單是執(zhí)行以下操作的半透明啟動(dòng)屏幕:
- 覆蓋控件或表單
- 防止用戶與重疊控件進(jìn)行交互
- 覆蓋控件,即使它更改其大小或在屏幕上的位置
- 在單獨(dú)的線程中運(yùn)行,并且不阻塞主線程和操作線程
- 允許您在重疊控件上顯示自定義消息和按鈕
 
 
注意:運(yùn)行Overlay Form module in the XtraEditors MainDemo來查看正在使用的表單,單擊功能區(qū)中的Open Solution獲取源代碼。
顯示覆蓋表單
調(diào)用ShowOverlayForm(Control) 方法來在控件或表單上顯示覆蓋表單,該方法返回一個(gè)句柄,您可以將其傳遞給 CloseOverlayForm(IOverlaySplashScreenHandle)方法來關(guān)閉表單。
下面的代碼顯示在應(yīng)用程序執(zhí)行長(zhǎng)時(shí)間運(yùn)行的操作時(shí)如何在當(dāng)前表單上顯示覆蓋表單。
C#:
using DevExpress.XtraSplashScreen;
//...
IOverlaySplashScreenHandle ShowProgressPanel() {
return SplashScreenManager.ShowOverlayForm(this);
}
void CloseProgressPanel(IOverlaySplashScreenHandle handle) {
if(handle != null)
SplashScreenManager.CloseOverlayForm(handle);
}
//...
IOverlaySplashScreenHandle handle = null;
try {
handle = ShowProgressPanel();
// Launch a long-running operation while
// the Overlay Form overlaps the current form.
}
finally {
CloseProgressPanel(handle);
}
VB.NET :
Imports DevExpress.XtraSplashScreen '... Private Function ShowProgressPanel() As IOverlaySplashScreenHandle Dim handle As IOverlaySplashScreenHandle = SplashScreenManager.ShowOverlayForm(Me) Return handle End Function Private Sub CloseProgressPanel(ByVal handle As IOverlaySplashScreenHandle) If handle IsNot Nothing Then SplashScreenManager.CloseOverlayForm(handle) End Sub '... Dim Handle As IOverlaySplashScreenHandle = Nothing Try Handle = ShowProgressPanel() 'Launch a long-running operation while 'the Overlay Form overlaps the main form. Finally CloseProgressPanel(Handle) End Try
警告:您只能在已初始化(創(chuàng)建其句柄)的控件/表單上顯示覆蓋表單,否則將拋出,請(qǐng)參見 。
疊加表單手柄
您也可以使用句柄的Close()方法來關(guān)閉疊加表單。
顯示疊加表單時(shí),聚焦控件將失去焦點(diǎn),當(dāng)Overlay Form關(guān)閉時(shí),此控件將重新獲得焦點(diǎn)。QueueFocus(Control)和QueueFocus(IntPtr)方法允許您指定在關(guān)閉Overlay Form時(shí)應(yīng)該聚焦的控件,傳遞來防止所有控件都有焦點(diǎn)。
您也可以使用QueueCloseUpAction(Action)方法來指定當(dāng)Overlay Form關(guān)閉時(shí)應(yīng)該執(zhí)行的動(dòng)作。
C#:
void ReloadData() {
using(var handle = SplashScreenManager.ShowOverlayForm(gridControl)) {
handle.QueueFocus(IntPtr.Zero);
ReloadDataCore();
}
}
VB.NET :
Private Sub ReloadData() Using handle = SplashScreenManager.ShowOverlayForm(gridControl) handle.QueueFocus(IntPtr.Zero) ReloadDataCore() End Using End Sub
自定義覆蓋表單
ShowOverlayForm(Control, OverlayWindowOptions方法允許您顯示具有以下參數(shù)的覆蓋表單:
- StartupDelay ——顯示表單之前的延遲。
- BackColor —— 背景顏色。
- Opacity —— 不透明表單。
- FadeIn, FadeOut —— 用于顯示和隱藏表單的淡入淡出效果。
- 
		AnimationType —— 動(dòng)畫的類型(等待指示符):
		- 
				Image ——旋轉(zhuǎn)的圖像,默認(rèn)圖像取決于皮膚。 使用ImageSize屬性指定默認(rèn)圖像的大小,默認(rèn)圖像大小取決于重疊控件的大小,Image屬性指定一個(gè)自定義圖像。
 RotationParameters屬性指定旋轉(zhuǎn)周期和單旋轉(zhuǎn)幀數(shù)。
- Line —— 使用LineAnimationParameters屬性指定點(diǎn)數(shù),點(diǎn)的大小以及點(diǎn)之間的距離。
 
- 
				Image ——旋轉(zhuǎn)的圖像,默認(rèn)圖像取決于皮膚。 使用ImageSize屬性指定默認(rèn)圖像的大小,默認(rèn)圖像大小取決于重疊控件的大小,Image屬性指定一個(gè)自定義圖像。
- DisableInput——重疊表單是否接收焦點(diǎn)并禁用重疊控件上的用戶輸入,關(guān)閉疊加表單后,它將焦點(diǎn)返回到控件。
- CustomPainter —— 一個(gè)用于繪制表單的OverlayWindowPainterBase后代。
- SkinName —— 應(yīng)用于表單的skin名稱,默認(rèn)的等待指示器,淡入淡出效果和顏色取決于皮膚,默認(rèn)外觀對(duì)應(yīng)于重疊控件的外觀
- UseDirectX —— 指定是否使用DirectX渲染覆蓋表單,要將DirectX用于所有兼容的DevExpress控件,請(qǐng)?jiān)?a >Project Settings中啟用Use DirectX選項(xiàng)。
所有這些參數(shù)都是可選的,如果省略參數(shù),則使用默認(rèn)值,不帶選項(xiàng)的ShowOverlayForm(Control)方法使用靜態(tài)(在VB中共享)默認(rèn)選項(xiàng)。
下面的代碼顯示了如何顯示帶有自定義參數(shù)的覆蓋表單。
C#:
using DevExpress.XtraSplashScreen; OverlayWindowOptions options = new OverlayWindowOptions( startupDelay: 1000, backColor: Color.Red, opacity: 0.5, fadeIn: false, fadeOut: false, imageSize: new Size(64, 64) ); IOverlaySplashScreenHandle handle1 = SplashScreenManager.ShowOverlayForm(gridControl1, options); IOverlaySplashScreenHandle handle2 = SplashScreenManager.ShowOverlayForm( owner: gridControl1, startupDelay: 1000, backColor: Color.Red, opacity: 127, fadeIn: false, fadeOut: false, imageSize: new Size(64, 64) );
VB.NET :
Imports DevExpress.XtraSplashScreen Dim options As New OverlayWindowOptions( startupDelay:=1000, backColor:=Color.Red, opacity:=0.5, fadeIn:=False, fadeOut:=False, imageSize:=New Size(64, 64) ) Dim formHandle1 As IOverlaySplashScreenHandle = SplashScreenManager.ShowOverlayForm(gridControl1, options) Dim formHandle2 As IOverlaySplashScreenHandle = SplashScreenManager.ShowOverlayForm( owner:=gridControl1, startupDelay:=1000, backColor:=Color.Red, opacity:=127, fadeIn:=False, fadeOut:=False, imageSize:=New Size(64, 64) )
自定義Painter
您可以按以下方式呈現(xiàn)重疊表單:
- 繼承自O(shè)verlayWindowPainterBase類
- 重寫Draw方法
- 將創(chuàng)建的對(duì)象作為參數(shù)傳遞給ShowOverlayForm方法
下面的代碼段顯示了如何顯示自定義消息,如下圖所示:
 
 
C#:
using DevExpress.XtraSplashScreen;
using DevExpress.Utils.Drawing;
using System.Drawing;
//...
class CustomOverlayPainter : OverlayWindowPainterBase
{
// Defines the string’s font.
static readonly Font drawFont;
static CustomOverlayPainter() {
drawFont = new Font("Tahoma", 18);
}
protected override void Draw(OverlayWindowCustomDrawContext context)
{
//The Handled event parameter should be set to true.
//to disable the default drawing algorithm.
context.Handled = true;
//Provides access to the drawing surface.
GraphicsCache cache = context.DrawArgs.Cache;
//Adjust the TextRenderingHint option
//to improve the image quality.
cache.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//Overlapped control bounds.
Rectangle bounds = context.DrawArgs.Bounds;
//Draws the default background.
context.DrawBackground();
//Specify the string that will be drawn on the Overlay Form instead of the wait indicator.
String drawString = "Please wait...";
//Get the system's black brush.
Brush drawBrush = Brushes.Black;
//Calculate the size of the message string.
SizeF textSize = cache.CalcTextSize(drawString, drawFont);
//A point that specifies the upper-left corner of the rectangle where the string will be drawn.
PointF drawPoint = new PointF(
bounds.Left + bounds.Width / 2 - textSize.Width / 2,
bounds.Top + bounds.Height / 2 - textSize.Height / 2
);
//Draw the string on the screen.
cache.DrawString(drawString, drawFont, drawBrush, drawPoint);
}
}
//...
IOverlaySplashScreenHandle handle = SplashScreenManager.ShowOverlayForm(this, customPainter: new CustomOverlayPainter());
VB.NET :
Imports DevExpress.Utils.Drawing
Imports DevExpress.XtraSplashScreen
Imports System.Drawing
'...
Class CustomOverlayPainter
Inherits OverlayWindowPainterBase
'Defines the string’s font.
Shared ReadOnly drawFont As Font
Shared Sub New()
drawFont = New Font("Tahoma", 18)
End Sub
Protected Overrides Sub Draw(context As OverlayWindowCustomDrawContext)
'The Handled event parameter should be set to true
'to disable the default drawing algorithm.
context.Handled = True
'Provides access to the drawing surface.
Dim cache As GraphicsCache = context.DrawArgs.Cache
'Adjust the TextRenderingHint option
’to improve the image quality.
cache.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
'Overlapped control bounds.
Dim bounds As Rectangle = context.DrawArgs.Bounds
'Draws the default background.
context.DrawBackground()
'Create the string to draw.
Dim drawString As String = "Please wait..."
'Get the system black brush.
Dim drawBrush As Brush = Brushes.Black
'Calculate the size of the message string.
Dim textSize As SizeF = cache.CalcTextSize(drawString, drawFont)
'A point that specifies the upper-left corner of the rectangle where the string should be drawn.
Dim drawPoint As PointF = New PointF(bounds.Left + bounds.Width / 2 - textSize.Width / 2, bounds.Top + bounds.Height / 2 - textSize.Height / 2)
'Draw the string on the screen.
cache.DrawString(drawString, drawFont, drawBrush, drawPoint)
End Sub
End Class
'...
Dim handle As IOverlaySplashScreenHandle = SplashScreenManager.ShowOverlayForm(Me, customPainter:=New CustomOverlayPainter())                
            
 QQ交談
QQ交談 在線咨詢
在線咨詢 
                 
                
 渝公網(wǎng)安備
            50010702500608號(hào)
渝公網(wǎng)安備
            50010702500608號(hào)
             
            
 客服熱線
客服熱線