Colorful Console Mode Applications in Visual Basic

Introduction:

So, you need to a write a console mode application, no reason you can't have a little fun with it by introducing color into the output.  This article describes how to jazz up a console mode application with color (which, as you will see, is pretty darned easy to do).

Application-in-VB.NET.gif

Figure 1:  The Application

Getting Started:

In order to get started, unzip the included project and open the solution in the Visual Studio 2008 environment.   In the solution explorer, you should note these files (Figure 2):

Solution-Explorer-in-VB.NET.gif

Figure 2:  Solution Explorer

As you can see from Figure 2; there is a single console mode application entitled, "ColorfulConsole_VB" which contains only the Program.vb file.  All of the code used in the example project is contained in the Program.vb file.

The Application (Program.vb)

If you'd care to open the code view up into the IDE you will see that the code file begins with the following library imports (which are the defaults):

Imports System

Imports System.Collections.Generic

Imports System.Linq

Imports System.Text

Following the imports, the module is declared:

Module Module1

 

Next up, the main function begins by created a typed list of accounts; the account class is nested in the Program.vb file and is used to capture some fake account information so that there is something to display.

 

    Sub Main()

 

        ' create some dummy data so we have

        ' something to display

        Dim accts As List(Of Accounts) = CreateAccounts()

 

After the list is created, the console's foreground and background color properties are set.  That is all that is needed to color the console application's output.

 

        ' set the foreground and background colors

        ' using the console's Foreground and BackgroundColor

        ' properties - here we are setting it up to show

        ' white characters on a dark blue background

        Console.ForegroundColor = ConsoleColor.White

        Console.BackgroundColor = ConsoleColor.DarkBlue

 

After the colors are set, a banner is sent to the display; the banner will appear as white text on a blue field:

 

        ' write the banner to screen using writeline

        Console.WriteLine("*****************************************************")

        Console.WriteLine("*                                                   *")

        Console.WriteLine("*        Summary of Accounts (By Last Name)         *")

        Console.WriteLine("*                                                   *")

        Console.WriteLine("*****************************************************")

 

 

        ' add a couple of new lines to break up the banner

        ' from the rest of the text

        Console.Write(Environment.NewLine + Environment.NewLine)

 

After the banner has been sent to output, an LINQ to Objects query is used to sort the list by the account holder's last name:

 

        ' use Linq to Objects to order the list by last name

        Dim q = _

            (From ac In accts _

            Order By ac.LastName Ascending _

            Select ac).ToList()

 

After sorting the list alphabetically but the account holder's last name, the code goes through the list item by item and writes the account information to the screen.  The code is annotated to describe each section but in general, the intent was to write the labels in white and the values is some other color; the account balances were treated differently to show positive balances in green and negative balances in red.  Note that to use multiple colors on a single line, you need only set the color, use the Console Write (in lieu of WriteLine) to write out a partial line; reset the color and the write out the rest of the line in the other color.

 

        ' display the list in the console

        Dim a As New Accounts()

 

        For Each a In q

 

            ' set the foreground and background colors

            ' using the console's Foreground and BackgroundColor

            ' properties - here we are setting it up to show

            ' white characters on a black background

            Console.ForegroundColor = ConsoleColor.White

            Console.BackgroundColor = ConsoleColor.Black

 

            ' write out the Name title using Console.Write

            Console.Write("Name: ")

 

            ' change the foreground color and finish the

            ' line with the name of the account holder

            ' (two colors in one line)

            Console.ForegroundColor = ConsoleColor.Cyan

            Console.BackgroundColor = ConsoleColor.Black

            Console.Write(Space(10) + a.LastName + ", " + a.FirstName + " " +

            a.MiddleName + Environment.NewLine)

 

            ' reset to white characters on black

            ' and write out the next line title

            Console.ForegroundColor = ConsoleColor.White

            Console.BackgroundColor = ConsoleColor.Black

            Console.Write("Account Type: ")

 

            ' change colors and finish the Account Type Line

            Console.ForegroundColor = ConsoleColor.Blue

            Console.BackgroundColor = ConsoleColor.Black

            Console.Write(Space(2) + a.TypeOfAccount.ToString() +

            Environment.NewLine)

 

            ' check the balance to see if the account

            ' holder is in the red

            If a.Balance < 0 Then

 

                ' set the colors to write the title portion

                ' of the line

                Console.ForegroundColor = ConsoleColor.White

                Console.BackgroundColor = ConsoleColor.Black

                Console.Write("Balance: ")

 

                ' the account holder is in debt so show

                ' their negative balance in red

                Console.ForegroundColor = ConsoleColor.Red

                Console.BackgroundColor = ConsoleColor.Black

                Console.Write(Space(7) + a.Balance.ToString() + Environment.NewLine +

                Environment.NewLine)

 

            Else

 

                ' set the colors to write the title portion

                ' of the line

                Console.ForegroundColor = ConsoleColor.White

                Console.BackgroundColor = ConsoleColor.Black

                Console.Write("Balance: ")

 

                ' the account holder has a positive balance

                ' so show their balance in green

                Console.ForegroundColor = ConsoleColor.Green

                Console.BackgroundColor = ConsoleColor.Black

                Console.Write(Space(7) + a.Balance.ToString() + Environment.NewLine +

                Environment.NewLine)

            End If 

        Next

The main function wraps up by beeping one time and then using a Console Read call to pause the display and allow the user to read it.

       ' beep on completion

        Beep()

 

        ' wait for the user to read the information

        Console.Read()

 

    End Sub

 

The rest of the code is merely used to generate some fake data for display purposes.  The remainder of the code is as follows:

 

    ''' <summary>

    ''' This function creates a group of phony account

    ''' information so we have something to display

    ''' </summary>

    ''' <returns></returns>

    Public Function CreateAccounts() As List(Of Accounts)

 

        '' create a typed list to contain

        '' account information

        Dim list As New List(Of Accounts)()

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct1 As New Accounts()

        acct1.FirstName = "William"

        acct1.MiddleName = "Alexander"

        acct1.LastName = "Carson"

        acct1.TypeOfAccount = Accounts.AccountType.Checking

        acct1.Balance = 121.5

        list.Add(acct1)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct2 As New Accounts()

        acct2.FirstName = "Barney"

        acct2.MiddleName = "Hubert"

        acct2.LastName = "Fortner"

        acct2.TypeOfAccount = Accounts.AccountType.Checking

        acct2.Balance = 1066.33

        list.Add(acct2)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct3 As New Accounts()

        acct3.FirstName = "Julia"

        acct3.MiddleName = "Mildred"

        acct3.LastName = "Daniels"

        acct3.TypeOfAccount = Accounts.AccountType.Savings

        acct3.Balance = 3397.58

        list.Add(acct3)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct4 As New Accounts()

        acct4.FirstName = "Alvin"

        acct4.MiddleName = "Micheal"

        acct4.LastName = "Bixby"

        acct4.TypeOfAccount = Accounts.AccountType.Checking

        acct4.Balance = -33.77

        list.Add(acct4)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct5 As New Accounts()

        acct5.FirstName = "Boris"

        acct5.MiddleName = "Winston"

        acct5.LastName = "Carloff"

        acct5.TypeOfAccount = Accounts.AccountType.Christmas

        acct5.Balance = 14551.52

        list.Add(acct5)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct6 As New Accounts()

        acct6.FirstName = "Debra"

        acct6.MiddleName = "Michelle"

        acct6.LastName = "Silvera"

        acct6.TypeOfAccount = Accounts.AccountType.Savings

        acct6.Balance = 936.93

        list.Add(acct6)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct7 As New Accounts()

        acct7.FirstName = "Camden"

        acct7.MiddleName = "Alphonse"

        acct7.LastName = "Villalobos"

        acct7.TypeOfAccount = Accounts.AccountType.Checking

        acct7.Balance = -71.29

        list.Add(acct7)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct8 As New Accounts()

        acct8.FirstName = "Drake"

        acct8.MiddleName = "Duk"

        acct8.LastName = "Mallard"

        acct8.TypeOfAccount = Accounts.AccountType.Christmas

        acct8.Balance = 815.18

        list.Add(acct8)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct9 As New Accounts()

        acct9.FirstName = "Talbert"

        acct9.MiddleName = "Daz"

        acct9.LastName = "Yatz"

        acct9.TypeOfAccount = Accounts.AccountType.Savings

        acct9.Balance = 14.21

        list.Add(acct9)

 

        '' create and populate an account

        '' and then add it to the list

        Dim acct10 As New Accounts()

        acct10.FirstName = "Miaxwif"

        acct10.MiddleName = "Isa"

        acct10.LastName = "Nidmare"

        acct10.TypeOfAccount = Accounts.AccountType.Checking

        acct10.Balance = -19697.33

        list.Add(acct10)

 

        '' return the list of dummy data to the caller

        Return list

 

    End Function 

 

    ''' <summary>

    ''' A class used to contain phony account information

    ''' </summary>

    Public Class Accounts

 

        ' set up an enumeration to

        ' define the possible account

        ' types

        Public Enum AccountType

            Checking

            Savings

            Christmas

        End Enum 

 

        ' private member variables

        Private mFirstName As String

        Private mMiddleName As String

        Private mLastName As String

        Private mAcctType As AccountType

        Private mBalance As Decimal 

 

        ' default constructor

        Public Sub New()

 

        End Sub 

 

        ' properties

 

        Public Property FirstName() As String

            Get

                Return mFirstName

            End Get

            Set(ByVal value As String)

                mFirstName = value

            End Set

        End Property 

 

        Public Property MiddleName() As String

            Get

                Return mMiddleName

            End Get

            Set(ByVal value As String)

                mMiddleName = value

            End Set

        End Property 

 

        Public Property LastName() As String

            Get

                Return mLastName

            End Get

            Set(ByVal value As String)

                mLastName = value

            End Set

        End Property 

 

        Public Property TypeOfAccount() As AccountType

            Get

                Return mAcctType

            End Get

            Set(ByVal value As AccountType)

                mAcctType = value

            End Set

        End Property 

 

        Public Property Balance() As Decimal

            Get

                Return mBalance

            End Get

            Set(ByVal value As Decimal)

                mBalance = value

            End Set

        End Property 

 

    End Class 

End Module

Summary

The article demonstrates an approach to applying color to a simple console mode application.  Using the Console class Foreground and Background color properties in conjunction with the Console Colors, it is possible to apply color to the display in its entirety, or by word or word, or even by individual letters.  Given the limitations for display within the context of a standard console mode application, color may be a useful tool or highlighting certain areas of the output, or to make the output more readable by using color to help break out certain areas of the display.