您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何使用DevExpress WinForms幫助文檔表單和用戶控件實現覆蓋表單,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
覆蓋表單是執行以下操作的半透明啟動屏幕:
覆蓋控件或表單
防止用戶與重疊控件進行交互
覆蓋控件,即使它更改其大小或在屏幕上的位置
在單獨的線程中運行,并且不阻塞主線程和操作線程
允許您在重疊控件上顯示自定義消息和按鈕
注意:運行Overlay Form module in the XtraEditors MainDemo來查看正在使用的表單,單擊功能區中的Open Solution獲取源代碼。
顯示覆蓋表單
調用ShowOverlayForm(Control) 方法來在控件或表單上顯示覆蓋表單,該方法返回一個句柄,您可以將其傳遞給 CloseOverlayForm(IOverlaySplashScreenHandle)方法以關閉表單。
下面的代碼顯示在應用程序執行長時間運行的操作時如何在當前表單上顯示覆蓋表單。
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
警告:您只能在已初始化(創建其句柄)的控件/表單上顯示覆蓋表單;否則將拋出InvalidOperationException,請參見 IsHandleCreated 。
自定義覆蓋表單
ShowOverlayForm(Control, OverlayWindowOptions) 方法允許您顯示具有以下參數的覆蓋表單:
StartupDelay — 顯示表單之前的延遲。
BackColor — 背景顏色。
Opacity — 不透明表單。
FadeIn, FadeOut — 用于顯示和隱藏表單的淡入淡出效果。
AnimationType — 動畫的類型(等待指示符):
Image — 旋轉的圖像,默認圖像取決于皮膚。 使用ImageSize屬性指定默認圖像的大小,默認圖像大小取決于重疊控件的大小,Image屬性指定一個自定義圖像。
RotationParameters屬性指定旋轉周期和單旋轉幀數。
Line — 使用LineAnimationParameters屬性指定點數,點的大小以及點之間的距離。
CustomPainter — 一個用于繪制表單的OverlayWindowPainterBase后代,請參閱Custom Painter部分中的示例。
SkinName — 應用于表單的skin名稱,默認的等待指示器,淡入淡出效果和顏色取決于皮膚,默認外觀對應于重疊控件的外觀
UseDirectX — 指定是否使用DirectX渲染覆蓋表單,要將DirectX用于所有兼容的DevExpress控件,請在Project Settings中啟用Use DirectX選項,有關更多信息,請參閱以下主題: DirectX Hardware Acceleration。
所有這些參數都是可選的。 如果省略參數,則使用默認值。 不帶選項的ShowOverlayForm(Control)方法使用靜態(在VB中共享)默認選項。
下面的代碼顯示了如何顯示帶有自定義參數的覆蓋表單。
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
您可以按以下方式呈現重疊表單:
繼承自OverlayWindowPainterBase類
重寫Draw方法
將創建的對象作為參數傳遞給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())
上述內容就是如何使用DevExpress WinForms幫助文檔表單和用戶控件實現覆蓋表單,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。