## Introduction

This article describes a procedure that will be useful to draw a bar chart in a form, with all features. Using this procedure, any number of graphs can be drawn in a form, by setting the X axis and Y axis.

## Input Parameters

`objEnum As IDictionaryEnumerator`

- the data from which the graph has to be drawn.
`intItemCount As Integer`

- number of items to show in a graph (you can get from the `DictionaryEnumerator`

itself).
`strGraphTitle As String`

- title has to be drawn for the graph.
`Xaxis As Integer`

- starting X axis.
`Yaxis As Integer`

- starting Y axis.
`MaxWidth As Int16`

- maximum width of the graph (for calculation purpose).
`MaxHt As Int16`

- maximum height of the graph (for calculation purpose).
`clearForm As Boolean`

- whether the `Form`

has to clear or not.
`Optional ByVal SpaceRequired As Boolean`

- whether space is required in between 2 graphs.

The graph has to be called in the `Paint`

event of the `Form`

and the parameters should be resized in the `Resize`

event of the `Form`

.

`LoadColorArray`

procedure is used to have required colors to draw the graph. Because, if we use RGB, overall the graph will not be good visibly.

The parameter `clearForm`

can be used when you need to show 2 graphs in the same `Form`

; it will be useful then...

Public Sub drawBarChart(ByVal objEnum As IDictionaryEnumerator, _
ByVal intItemCount As Integer, ByVal strGraphTitle As String, _
ByVal Xaxis As Integer, ByVal Yaxis As Integer, _
ByVal MaxWidth As Int16, ByVal MaxHt As Int16, _
ByVal clearForm As Boolean, _
Optional ByVal SpaceRequired As Boolean = False)
Dim intGraphXaxis As Integer = Xaxis
Dim intGraphYaxis As Integer = Yaxis
Dim intWidthMax As Integer = MaxWidth
Dim intHeightMax As Integer = MaxHt
Dim intSpaceHeight As Integer
Dim intMaxValue As Integer = 0
Dim intCounter As Integer
Dim intBarWidthMax
Dim intBarHeight
Dim strText As String
Try
Dim grfx As Graphics = CreateGraphics()
If clearForm = True Then
grfx.Clear(BackColor)
End If
grfx.DrawString(strGraphTitle, New Font("VERDANA", 12.0, _
FontStyle.Bold, GraphicsUnit.Point), _
Brushes.DeepPink, intGraphXaxis + (intWidthMax / 4), _
(intGraphYaxis - intHeightMax) - 40)
intBarHeight = CInt(intHeightMax / intItemCount)
intSpaceHeight = _
CInt((intHeightMax / (intItemCount - 1)) - intBarHeight)
If Not objEnum Is Nothing Then
While objEnum.MoveNext = True
If objEnum.Value > intMaxValue Then
intMaxValue = objEnum.Value
End If
End While
End If
intBarWidthMax = CInt(intWidthMax / intMaxValue)
If Not objEnum Is Nothing Then
intCounter = 1
objEnum.Reset()
grfx.DrawLine(Pens.Black, intGraphXaxis, _
intGraphYaxis, intGraphXaxis + intWidthMax, _
intGraphYaxis)
grfx.DrawLine(Pens.Black, intGraphXaxis, _
intGraphYaxis, intGraphXaxis, _
(intGraphYaxis - intHeightMax) - 25)
While objEnum.MoveNext = True
intGraphYaxis = intGraphYaxis - intBarHeight
grfx.DrawRectangle(Pens.Black, _
New Rectangle(intGraphXaxis, intGraphYaxis, _
intBarWidthMax * objEnum.Value, intBarHeight))
grfx.FillRectangle(objColorArray(intCounter), _
New Rectangle(intGraphXaxis, intGraphYaxis, _
intBarWidthMax * objEnum.Value, intBarHeight))
strText = "(" & objEnum.Key & "," & objEnum.Value & ")"
grfx.DrawString(strText, New Font("VERDANA", 8.0, _
FontStyle.Regular, GraphicsUnit.Point), _
Brushes.Black, intGraphXaxis + _
(intBarWidthMax * objEnum.Value), intGraphYaxis)
intCounter += 1
If SpaceRequired = True Then
intGraphYaxis = intGraphYaxis - intSpaceHeight
End If
If intCounter > objColorArray.GetUpperBound(0) Then
intCounter = 1
End If
End While
If clearForm = True Then
grfx.Dispose()
End If
End If
Catch ex As Exception
Throw ex
End Try
End Sub

## Advantages of the procedure

We can have any number of graphs in a single form, and settings of a graph can be changed at runtime. Using `LoadColorArrays`

procedure (Not pasted here. But available in the demo project) we can give good colors in the graph which will attract the users very much.