DevExpress技术交流群3:700924826 欢迎一起进群讨论
在此示例中,自定义进度栏控件被添加到启动屏幕。 该示例显示如何通过从启动画面管理器发送命令来动态更新此进度栏控件。启动画面由启动画面管理器在单独的线程中显示,可以通过命令机制执行与启动画面的交互。 您通过SplashScreenManager.SendCommand方法发送命令,并通过覆盖SplashScreen.ProcessCommand方法来处理此命令。 在该示例中,自定义命令被发送到启动画面,以推进启动画面的进度条控件的进度。
注意:完整的示例项目位于https://github.com/DevExpress-Examples/how-to-interact-with-a-splash-screen-by-sending-commands-e3576。
SplashScreen1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DevExpress.XtraSplashScreen; namespace SplashScreen_ProcessCommand { public partial class SplashScreen1 : SplashScreen { public SplashScreen1() { InitializeComponent(); } #region Overrides public override void ProcessCommand(Enum cmd, object arg) { base.ProcessCommand(cmd, arg); SplashScreenCommand command = (SplashScreenCommand)cmd; if (command == SplashScreenCommand.SetProgress) { int pos = (int)arg; progressBarControl1.Position = pos; } } #endregion public enum SplashScreenCommand { SetProgress, Command2, Command3 } } }
Form1.cs
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 SplashScreen_ProcessCommand { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnShowSplashScreen_Click(object sender, EventArgs e) { // Open a Splash Screen SplashScreenManager.ShowForm(this, typeof(SplashScreen1), true, true, false); // The splash screen will be opened in a separate thread. To interact with it, use the SendCommand method. for (int i = 1; i <= 100; i++) { SplashScreenManager.Default.SendCommand(SplashScreen1.SplashScreenCommand.SetProgress, i); //To process commands, override the SplashScreen.ProcessCommand method. Thread.Sleep(25); } // Close the Splash Screen. SplashScreenManager.CloseForm(false); } } }
Form1.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Linq Imports System.Text Imports System.Windows.Forms Imports DevExpress.XtraSplashScreen Imports System.Threading Namespace SplashScreen_ProcessCommand Partial Public Class Form1 Inherits Form Public Sub New() InitializeComponent() End Sub Private Sub btnShowSplashScreen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnShowSplashScreen.Click ' Open a Splash Screen SplashScreenManager.ShowForm(Me, GetType(SplashScreen1), True, True, False) ' The splash screen will be opened in a separate thread. To interact with it, use the SendCommand method. For i As Integer = 1 To 100 SplashScreenManager.Default.SendCommand(SplashScreen1.SplashScreenCommand.SetProgress, i) 'To process commands, override the SplashScreen.ProcessCommand method. Thread.Sleep(25) Next i ' Close the Splash Screen. SplashScreenManager.CloseForm(False) End Sub End Class End Namespace
SplashScreen1.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Text Imports System.Windows.Forms Imports DevExpress.XtraSplashScreen Namespace SplashScreen_ProcessCommand Partial Public Class SplashScreen1 Inherits SplashScreen Public Sub New() InitializeComponent() End Sub #Region "Overrides" Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object) MyBase.ProcessCommand(cmd, arg) Dim command As SplashScreenCommand = CType(cmd, SplashScreenCommand) If command = SplashScreenCommand.SetProgress Then Dim pos As Integer = CInt(Fix(arg)) progressBarControl1.Position = pos End If End Sub #End Region Public Enum SplashScreenCommand SetProgress Command2 Command3 End Enum End Class End Namespace