How to Select a Specific Bar on a 2D Graph with the Mouse

Last reviewed: June 21, 1995
Article ID: Q123840
The information in this article applies to:

- Professional Edition of Microsoft Visual Basic for Windows,

  version 3.0

SUMMARY

This article explains how to detect which one of the Slices or Bars on a 2D Bar Graph was selected with the mouse.

MORE INFORMATION

The graph control does not have a built-in method that you can use to discover which bar or slice of a 2D Bar Graph your mouse pointer is currently over. However, the graph control's ColorData property does correspond to Visual Basic's QBColor() function. Therefore, if you display the Graph in a picture box by assigning the Graph's picture property to a picture box, you can use the picture box's Point(x,y) method to compare the color of the bar at the position of your mouse. You can use this method to differentiate up to 14 different points.

Step-by-Step Example

  1. Start a new project in Visual Basic (ALT, F, N). Form1 is created by default.

  2. Add a Label and Graph control. Then add a Picture control on top of the graph control; give both controls identical Top, Left, Width, and Height property values. Set the GraphType to Pie or Bar chart.

  3. Add the following code to the Form_Load event:

       Sub Form_Load ()
          Picture1.Move Graph1.Left, Graph1.Top, Graph1.Width, Graph1.Height
          Graph1.Visible = False
    
          ' Set the color to between 1 and the number of slices or Bars you
          ' will have (up to 14).
          For I = 1 to Graph1.NumPoints
              Graph1.ThisPoint = I
              Graph1.ColorData = I
          Next I
          Graph1.DrawMode = 2                'Draw the graph
          Picture1.Picture = Graph1.Picture  'Display in picture box
       End Sub
    
    

  4. Add the following code to the Picture1_MouseDown event:

       ' Place the following two lines on one, single line:
       Sub Picture1_MouseDown (Button As Integer, Shift As Integer,
          X As Single, Y As Single)
    
          Select Case Picture1.Point(X, Y)
             Case QBColor(1)
                 label1.Caption = "1st"
             Case QBColor(2)
                 label1.Caption = "2nd"
             Case QBColor(3)
                 label1.Caption = "3rd"
             Case QBColor(4)
                 label1.Caption = "4th"
             Case QBColor(5)
                 label1.Caption = "5th"
             Case QBColor(6)
                 label1.Caption = "6th"
             Case QBColor(7)
                 label1.Caption = "7th"
             Case QBColor(8)
                 label1.Caption = "8th"
             Case QBColor(9)
                 label1.Caption = "9th"
             Case QBColor(10)
                 label1.Caption = "10th"
             Case QBColor(11)
                 label1.Caption = "11th"
             Case QBColor(12)
                 label1.Caption = "12th"
             Case QBColor(13)
                 label1.Caption = "13th"
             Case QBColor(14)
                 label1.Caption = "14th"
          End Select
       End Sub
    
    

  5. Save the project (ALT, F, S).

  6. Run the program by pressing the F5 key. When you click any of the bars or Slices, the label will tell you which one you selected.

Notes

- To change the Data in the graph control and refresh the picture use:

   Graph1.DrawMode = 2
   Picture1.Picture = Graph1.Picture

- ColorData 0 is Black and 15 is White. By default the background is white
   and the lines are black, so don't use these colors. If you do, you might
   get invalid information.

- This method will not work reliably if multiple datasets (NumSets > 1) or
   3D versions of the bar graph are used. For multiple datasets, you may
   choose a specific color for each set. Then differentiate which set the
   user selects. A 3D bar uses black pixels for the shading effect, so it
   does not lend itself to this technique.


Additional reference words: 3.00
KBCategory: kbprg
KBSubcategory: PrgCtrlsCus


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 21, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.