Dialogs

In this part of the Visual Basic Winforms tutorial, we will talk about dialogs.

Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.

There are essentially two types of dialogs. Predefined dialogs and custom dialogs.

FolderBrowserDialog

This dialog prompts the user to select a folder.

' ZetCode Mono Visual Basic Winforms tutorial
'
' In this program we select a directory with a
' FolderBrowser dialog. The selected directory's
' name is shown in the statusbar. 
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com

Imports System.Windows.Forms
Imports System.Drawing


Public Class WinVBApp
    Inherits Form
    
    Dim statusbar As StatusBar

    Public Sub New

       Me.Text = "FolderBrowserDialog"
       Me.Size = New Size(300, 250)
       
       Me.InitUI
       
       Me.CenterToScreen

    End Sub
    
    Private Sub InitUI
    
        Dim toolbar As New ToolBar
        Dim open As New ToolBarButton

        statusbar = New StatusBar
        statusbar.Parent = Me

        toolbar.Buttons.Add(open)

        Me.Controls.Add(toolbar)

        AddHandler toolbar.ButtonClick, AddressOf Me.OnClicked
        
    End Sub

    Private Sub OnClicked(ByVal sender As Object, _
                    ByVal e As ToolBarButtonClickEventArgs)
    
        Dim dialog As New FolderBrowserDialog

        If dialog.ShowDialog(Me) = DialogResult.OK
           statusbar.Text = dialog.SelectedPath
        End If

    End Sub


    Public Shared Sub Main
        Application.Run(New WinVBApp)
    End Sub
   
End Class

We have a toolbar and one toolbar button. By clicking on the button, the FolderBrowserDialog appears on the screen. The name of the selected folder is shown in the statusbar.

Dim dialog As New FolderBrowserDialog

The FolderBrowserDialog is created.

If dialog.ShowDialog(Me) = DialogResult.OK
    statusbar.Text = dialog.SelectedPath
End If    

The ShowDialog method shows the dialog on the screen. If we click on the OK button of the dialog, the selected directory path is shown on the statusbar.

FolderBrowserDialog
Figure: FolderBrowserDialog

ColorDialog

This dialog displays available colors along with controls that enable the user to define custom colors.

' ZetCode Mono Visual Basic Winforms tutorial
'
' In this program we use the ColorDialog
' to change a color of a rectangle
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com

Imports System.Windows.Forms
Imports System.Drawing


Public Class WinVBApp
    Inherits Form
    
    Private col As Color

    Private Const rectWidth As Integer = 100
    Private Const rectHeight As Integer = 100
    Private Dim r As Rectangle


    Public Sub New

       Me.Text = "ColorDialog"
       Me.Size = New Size(300, 250)
       
       Me.InitUI
       
       Me.CenterToScreen

    End Sub
    
    Private Sub InitUI
    
        Dim tbar As New ToolBar
        Dim open As New ToolBarButton

        col = Color.Blue

        tbar.Buttons.Add(open)

        Me.LocateRect

        Me.SetStyle(ControlStyles.ResizeRedraw, True)
        Controls.Add(tbar)

        AddHandler Me.Paint, AddressOf Me.OnPaint
        AddHandler tbar.ButtonClick, AddressOf Me.OnClicked
        
    End Sub
    
    Private Sub OnPaint(ByVal sender As Object, ByVal e As PaintEventArgs)
    
      Dim g As Graphics = e.Graphics
      Me.LocateRect

      Dim brsh As New SolidBrush(col)

      g.FillRectangle(brsh, r)    
    
    End Sub

    Private Sub OnClicked(ByVal sender As Object, _ 
                    ByVal e As ToolBarButtonClickEventArgs)
    
       Dim dialog As New ColorDialog
       
       If dialog.ShowDialog(Me) = DialogResult.OK
          col = dialog.Color
          Me.Invalidate
       End If

    End Sub
    
    Private Sub LocateRect
        Dim x As Integer = (Me.ClientSize.Width - rectWidth) / 2
        Dim y As Integer = (Me.ClientSize.Height - rectHeight) / 2
        r = New Rectangle(x, y, rectWidth, rectHeight)
    End Sub


    Public Shared Sub Main
        Application.Run(New WinVBApp)
    End Sub
   
End Class

In this code example, we use the ColorDialog to choose a color for a rectangle that is located in the middle of the form control.

col = Color.Blue

At the beginning, the color of the rectangle is blue. We use the col variable to determine the color of the rectangle.

Dim dialog As New ColorDialog

The ColorDialog is created.

If dialog.ShowDialog(Me) = DialogResult.OK
  col = dialog.Color
  Me.Invalidate
End If

The code shows the color dialog. If we click on the OK button, we get the selected color and call the Invalidate method. The method invalidates the entire surface of the control and causes the control to be redrawn. The result is that the rectangle is drawn with a new color value.

ColorDialog
Figure: ColorDialog

FontDialog

The FontDialog is used to select fonts.

' ZetCode Mono Visual Basic Winforms tutorial
'
' In this program we use the FontDialog
' to change a font of a label
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com

Imports System.Windows.Forms
Imports System.Drawing


Public Class WinVBApp
    Inherits Form
    
    Private Dim txt As Label
    
    Public Sub New

       Me.Text = "FontDialog"
       Me.Size = New Size(300, 250)
       
       Me.InitUI
       
       Me.CenterToScreen

    End Sub
    
    Private Sub InitUI
    
        Dim tbar As New ToolBar
        tbar.Parent = Me
        
        Dim open As New ToolBarButton
        tbar.Buttons.Add(open)

        txt = New Label
        txt.Parent = Me
        txt.Text = "Winforms tutorial"
        
        Me.LocateText
        
        txt.AutoSize = True

        AddHandler Me.Resize, AddressOf Me.OnResize
        AddHandler tbar.ButtonClick, AddressOf Me.OnClicked
        
    End Sub
    
    Private Sub OnClicked(ByVal sender As Object, _ 
                    ByVal e As ToolBarButtonClickEventArgs)
    
       Dim dialog As New FontDialog
       
       If dialog.ShowDialog(Me) = DialogResult.OK
          txt.Font = dialog.Font
          Me.LocateText
       End If

    End Sub
    
    Private Sub LocateText
        txt.Top = (Me.ClientSize.Height - txt.Height) / 2
        txt.Left = (Me.ClientSize.Width - txt.Width) / 2
    End Sub

    Private Sub OnResize(ByVal sender As Object, ByVal e As EventArgs)
         Me.LocateText
    End Sub

    Public Shared Sub Main
        Application.Run(New WinVBApp)
    End Sub
   
End Class

We draw some text in the middle of the form control. We use the font dialog to change font for this text.

Dim dialog As New FontDialog

FontDialog is created.

If dialog.ShowDialog(Me) = DialogResult.OK
  txt.Font = dialog.Font
  Me.LocateText
End If

When we click on the OK button, we set a newly selected font for the Label control. Because the size of the text changes with different fonts, we must call the LocateText method, which locates the text in the middle of the form control.

FontDialog
Figure: FontDialog

OpenDialog

This dialog is used to open files.

' ZetCode Mono Visual Basic Winforms tutorial
'
' In this program we use the OpenDialog to
' open a file and show its contents in 
' a TextBox control
'
' author jan bodnar
' last modified May 2009
' website www.zetcode.com

Imports System.Windows.Forms
Imports System.Drawing
Imports System.IO


Public Class WinVBApp
    Inherits Form
    
    Private txtBox As TextBox
    
    Public Sub New

       Me.Text = "OpenDialog"
       Me.Size = New Size(300, 250)
       
       Me.InitUI
       
       Me.CenterToScreen

    End Sub
    
    Private Sub InitUI
    
        Dim tbar As New ToolBar
        tbar.Parent = Me
        
        Dim open As New ToolBarButton
        tbar.Buttons.Add(open)

        txtBox = New TextBox
        txtBox.Parent = Me
        txtBox.Multiline = True
        txtBox.ScrollBars = ScrollBars.Both
        txtBox.WordWrap = False
        txtBox.Parent = Me
        txtBox.Dock = DockStyle.Fill

        AddHandler tbar.ButtonClick, AddressOf Me.OnClicked
        
    End Sub
    
    Private Sub OnClicked(ByVal sender As Object, _ 
                    ByVal e As ToolBarButtonClickEventArgs)
                    
       Dim dia As New OpenFileDialog
       dia.Filter = "VB files (*.vb)|*.vb"

       If dia.ShowDialog(Me) = DialogResult.OK
           
           Dim reader As New StreamReader(dia.FileName)
           Dim data As String = reader.ReadToEnd
           
           reader.Close
           txtBox.Text = data
       
       End If
       
    End Sub
    

    Public Shared Sub Main
        Application.Run(New WinVBApp)
    End Sub
   
End Class

We use the OpenDialog control to open VB source files. We have a TextBox control, where we display the file.

Dim dia As New OpenFileDialog

The OpenDialog is created.

dia.Filter = "VB files (*.vb)|*.vb"

We set the Filter property to VB source files. Only VB files can be chosen with this dialog instance.

If dia.ShowDialog(Me) = DialogResult.OK
   
    Dim reader As New StreamReader(dia.FileName)
    Dim data As String = reader.ReadToEnd
   
    reader.Close
    txtBox.Text = data

End If

After clicking OK, we read the contents of the chosen file and put it into the TextBox control.

OpenDialog
Figure: OpenDialog

In this part of the Visual Basic Winforms tutorial, we showed various dialogs.