Files
2017-03-08 11:21:27 +01:00

127 lines
5.2 KiB
VB.net

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports DevExpress.XtraEditors
Imports System.Windows.Forms
Imports DevExpress.ExpressApp.Demos
Imports System.Drawing
Public Class ProgressForm
Implements IProgressControl
Public Const FormName As String = "ProgressForm"
Private _form As XtraForm
Private _progressbar As ProgressBarControl = New ProgressBarControl()
Private _cancelbutton As SimpleButton = New SimpleButton()
Private _label As Label = New Label()
Private _longOperation As LongOperation
Private _minimumProgressValue As Long
Private _maximumProgressValue As Long
Private _progressFormCaption As String
Private Delegate Sub UpdateProgressFormDelegate(value As Long, message As String)
Private Sub CreateProgressForm()
_form = New XtraForm()
_form.Name = FormName
_form.Width = 350
_form.Height = 125
_form.StartPosition = FormStartPosition.CenterScreen
_form.FormBorderStyle = FormBorderStyle.FixedDialog
_form.MinimizeBox = False
_form.MaximizeBox = False
_form.ControlBox = False
_form.ShowInTaskbar = False
_label.Parent = _form
_label.Location = New Point(10, 10)
_label.Size = New Size(_form.ClientSize.Width - 20, 13)
_progressbar.Parent = _form
_progressbar.Location = New Point(10, 30)
_progressbar.Name = "progressBar"
_progressbar.Size = New Size(_form.ClientSize.Width - 20, 15)
_progressbar.Properties.Minimum = _minimumProgressValue
_progressbar.Properties.Maximum = _maximumProgressValue
_progressbar.Properties.Step = 1
_cancelbutton.Parent = _form
_cancelbutton.DialogResult = DialogResult.Cancel
_cancelbutton.Size = New Size(75, 23)
_cancelbutton.Location = New Point((_form.Width - _cancelbutton.Width) / 2, 55)
_cancelbutton.Text = "&Cancel"
AddHandler _cancelbutton.Click, AddressOf cancelButton_Click
AddHandler _cancelbutton.LostFocus, AddressOf DoOnFormLostFocus
_form.CancelButton = _cancelbutton
_form.Text = _progressFormCaption
End Sub
Public Sub ShowProgress(longOperation As DevExpress.ExpressApp.Demos.LongOperation) Implements IProgressControl.ShowProgress
_form.Show()
Me._longOperation = longOperation
AddHandler Me._longOperation.ProgressChanged, AddressOf LongOperation_ProgressChanged
AddHandler Me._longOperation.Completed, AddressOf LongOperation_Completed
End Sub
Private Sub DoOnFormLostFocus(sender As Object, e As EventArgs)
_form.Focus()
End Sub
Private Sub LongOperation_Completed(sender As Object, e As LongOperationCompletedEventArgs)
If _form IsNot Nothing Then
_form.Invoke(New MethodInvoker(AddressOf _form.Close))
End If
End Sub
Private Sub UpdateProgressForm(value As Long, message As String)
_progressbar.EditValue = value
_progressbar.Update()
_label.Text = message
End Sub
Private Sub LongOperation_ProgressChanged(sender As Object, e As LongOperationProgressChangedEventArgs)
Dim value As Long = e.ProgressPercentage
If _form IsNot Nothing Then
_form.Invoke(New UpdateProgressFormDelegate(AddressOf UpdateProgressForm), value, e.Message)
End If
End Sub
Private Sub cancelButton_Click(sender As Object, e As EventArgs)
_longOperation.CancelAsync()
End Sub
Public Sub ProgressForm(caption As String, minimum As Integer, maximum As Integer)
_progressFormCaption = caption
_minimumProgressValue = minimum
_maximumProgressValue = maximum
CreateProgressForm()
End Sub
#Region "IDisposable Support"
Private disposedValue As Boolean ' To detect redundant calls
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
End If
_label = Nothing
RemoveHandler _cancelbutton.LostFocus, AddressOf DoOnFormLostFocus
RemoveHandler _longOperation.ProgressChanged, AddressOf LongOperation_ProgressChanged
RemoveHandler _longOperation.Completed, AddressOf LongOperation_Completed
_longOperation = Nothing
If _form IsNot Nothing Then
_form.Invoke(New MethodInvoker(AddressOf _form.Dispose))
_form = Nothing
End If
End If
Me.disposedValue = True
End Sub
' TODO: override Finalize() only if Dispose(ByVal disposing As Boolean) above has code to free unmanaged resources.
'Protected Overrides Sub Finalize()
' ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
' Dispose(False)
' MyBase.Finalize()
'End Sub
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class