193 lines
6.5 KiB
VB.net
193 lines
6.5 KiB
VB.net
Imports System.Drawing
|
|
Imports System.Windows.Forms
|
|
|
|
Public Class NNMsgBoxEx
|
|
Public Sub New(message As String, title As String)
|
|
Me.New(message, title, MessageBoxIcon.None)
|
|
End Sub
|
|
|
|
Public Sub New(message As String, title As String, icon As MessageBoxIcon)
|
|
Me.New(message, title, getMessageBoxIcon(icon))
|
|
End Sub
|
|
|
|
Public Sub New(message As String, title As String, icon As Icon)
|
|
InitializeComponent()
|
|
messageLbl.Text = message
|
|
Text = title
|
|
m_sysIcon = icon
|
|
If m_sysIcon Is Nothing Then messageLbl.Location = New System.Drawing.Point(FORM_X_MARGIN, FORM_Y_MARGIN)
|
|
SetButtons("OK")
|
|
End Sub
|
|
|
|
Private Shared Function getMessageBoxIcon(icon As MessageBoxIcon) As Icon
|
|
Dim oIcon As Icon = Nothing
|
|
|
|
Select Case icon
|
|
Case MessageBoxIcon.Asterisk
|
|
oIcon = SystemIcons.Asterisk
|
|
Case MessageBoxIcon.[Error]
|
|
oIcon = SystemIcons.[Error]
|
|
Case MessageBoxIcon.Exclamation
|
|
oIcon = SystemIcons.Exclamation
|
|
Case MessageBoxIcon.Question
|
|
oIcon = SystemIcons.Question
|
|
End Select
|
|
|
|
If oIcon IsNot Nothing Then
|
|
Return DevExpress.Utils.Drawing.Helpers.StockIconHelper.GetWindows8AssociatedIcon(oIcon)
|
|
Else
|
|
Return Nothing
|
|
End If
|
|
End Function
|
|
|
|
Private m_minWidth As Integer
|
|
Private m_minHeight As Integer
|
|
|
|
Public Sub SetMinSize(width As Integer, height As Integer)
|
|
m_minWidth = width
|
|
m_minHeight = height
|
|
End Sub
|
|
|
|
Public Sub SetButtons(ParamArray names As String())
|
|
Dim drs As DialogResult() = New DialogResult(names.Length - 1) {}
|
|
|
|
For i As Integer = 0 To names.Length - 1
|
|
drs(i) = DialogResult.None
|
|
Next
|
|
|
|
SetButtons(names, drs)
|
|
End Sub
|
|
|
|
Public Sub SetButtons(names As String(), results As DialogResult())
|
|
SetButtons(names, results, 1)
|
|
End Sub
|
|
|
|
Public Sub SetButtons(names As String(), results As DialogResult(), def As Integer)
|
|
If names Is Nothing Then Throw New ArgumentNullException("btnText", "Button Text is null")
|
|
Dim count As Integer = names.Length
|
|
If count < 1 OrElse count > 3 Then Throw New ArgumentException("Invalid number of buttons. Must be between 1 and 3.")
|
|
m_minButtonRowWidth = setButtonParams(btn1, names(0), If(def = 1, 1, 2), results(0))
|
|
|
|
If count > 1 Then
|
|
m_minButtonRowWidth += setButtonParams(btn2, names(1), If(def = 2, 1, 3), results(1)) + BUTTON_SPACE
|
|
End If
|
|
|
|
If count > 2 Then
|
|
m_minButtonRowWidth += setButtonParams(btn3, names(2), If(def = 3, 1, 4), results(2)) + BUTTON_SPACE
|
|
End If
|
|
End Sub
|
|
|
|
Private m_minButtonRowWidth As Integer
|
|
|
|
Private Shared Function setButtonParams(btn As Button, text As String, tab As Integer, dr As DialogResult) As Integer
|
|
btn.Text = text
|
|
btn.Visible = True
|
|
btn.DialogResult = dr
|
|
btn.TabIndex = tab
|
|
Return btn.Size.Width
|
|
End Function
|
|
|
|
Public Sub SetCheckbox(text As String)
|
|
SetCheckbox(text, False)
|
|
End Sub
|
|
|
|
Public Sub SetCheckbox(text As String, chcked As Boolean)
|
|
chkBx.Visible = True
|
|
chkBx.Text = text
|
|
chkBx.Checked = chcked
|
|
m_minButtonRowWidth += chkBx.Size.Width + CHECKBOX_SPACE
|
|
End Sub
|
|
|
|
Private Sub DialogBox_Load(sender As Object, e As EventArgs)
|
|
If Not btn1.Visible Then SetButtons(New String() {"OK"}, New DialogResult() {DialogResult.OK})
|
|
m_minButtonRowWidth += 2 * FORM_X_MARGIN
|
|
setDialogSize()
|
|
setButtonRowLocations()
|
|
End Sub
|
|
|
|
Const FORM_Y_MARGIN As Integer = 10
|
|
Const FORM_X_MARGIN As Integer = 16
|
|
Const BUTTON_SPACE As Integer = 5
|
|
Const CHECKBOX_SPACE As Integer = 15
|
|
Const TEXT_Y_MARGIN As Integer = 30
|
|
|
|
Private Sub setDialogSize()
|
|
Dim requiredWidth As Integer = messageLbl.Location.X + messageLbl.Size.Width + FORM_X_MARGIN
|
|
requiredWidth = If(requiredWidth > m_minButtonRowWidth, requiredWidth, m_minButtonRowWidth)
|
|
Dim requiredHeight As Integer = messageLbl.Location.Y + messageLbl.Size.Height - btn2.Location.Y + ClientSize.Height + TEXT_Y_MARGIN
|
|
Dim minSetWidth As Integer = If(ClientSize.Width > m_minWidth, ClientSize.Width, m_minWidth)
|
|
Dim minSetHeight As Integer = If(ClientSize.Height > m_minHeight, ClientSize.Height, m_minHeight)
|
|
Dim s As Size = New Size()
|
|
s.Width = If(requiredWidth > minSetWidth, requiredWidth, minSetWidth)
|
|
s.Height = If(requiredHeight > minSetHeight, requiredHeight, minSetHeight)
|
|
ClientSize = s
|
|
End Sub
|
|
|
|
Private Sub setButtonRowLocations()
|
|
Dim formWidth As Integer = ClientRectangle.Width
|
|
Dim x As Integer = formWidth - FORM_X_MARGIN
|
|
Dim y As Integer = btn1.Location.Y
|
|
|
|
If btn3.Visible Then
|
|
x -= btn3.Size.Width
|
|
btn3.Location = New Point(x, y)
|
|
x -= BUTTON_SPACE
|
|
End If
|
|
|
|
If btn2.Visible Then
|
|
x -= btn2.Size.Width
|
|
btn2.Location = New Point(x, y)
|
|
x -= BUTTON_SPACE
|
|
End If
|
|
|
|
x -= btn1.Size.Width
|
|
btn1.Location = New Point(x, y)
|
|
If chkBx.Visible Then chkBx.Location = New Point(FORM_X_MARGIN, chkBx.Location.Y)
|
|
End Sub
|
|
|
|
Private m_sysIcon As Icon
|
|
|
|
Protected Overrides Sub OnPaint(e As PaintEventArgs)
|
|
If m_sysIcon IsNot Nothing Then
|
|
Dim g As Graphics = e.Graphics
|
|
g.DrawIconUnstretched(m_sysIcon, New Rectangle(FORM_X_MARGIN, FORM_Y_MARGIN, m_sysIcon.Width, m_sysIcon.Height))
|
|
End If
|
|
|
|
MyBase.OnPaint(e)
|
|
End Sub
|
|
|
|
Public ReadOnly Property CheckboxChecked As Boolean
|
|
Get
|
|
Return chkBx.Checked
|
|
End Get
|
|
End Property
|
|
|
|
Private m_result As DialogBoxResult
|
|
|
|
Public ReadOnly Property Result As DialogBoxResult
|
|
Get
|
|
Return m_result
|
|
End Get
|
|
End Property
|
|
|
|
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn1.Click, btn2.Click, btn3.Click
|
|
If sender.Equals(btn1) Then
|
|
m_result = DialogBoxResult.Button1
|
|
ElseIf sender.Equals(btn2) Then
|
|
m_result = DialogBoxResult.Button2
|
|
ElseIf sender.Equals(btn3) Then
|
|
m_result = DialogBoxResult.Button3
|
|
End If
|
|
|
|
If (CType(sender, Button)).DialogResult = DialogResult.None Then
|
|
Close()
|
|
End If
|
|
End Sub
|
|
|
|
Enum DialogBoxResult
|
|
Button1
|
|
Button2
|
|
Button3
|
|
End Enum
|
|
End Class
|