MeasureItemEventArgs.Index Property

Gets the index of the item for which the height and width is needed.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

'Declaration
Public ReadOnly Property Index As Integer

Property Value

Type: System.Int32
The index of the item to be measured.

Public Class Form1
   Inherits System.Windows.Forms.Form
   Private WithEvents listBox1 As System.Windows.Forms.ListBox
   Private components As System.ComponentModel.Container = Nothing 

   Private FontSize As Single = 12.0F

   
   '  This sample displays a ListBox that contains a list of all the fonts 
   '  installed on the system and draws each item in its respective font. 
   
   Public Sub New()
      InitializeComponent()

      ' Populate control with the fonts installed on the system. 
      Dim families As FontFamily() = FontFamily.Families

      Dim family As FontFamily
      For Each family In families
         Dim style As FontStyle = FontStyle.Regular

         ' Monotype Corsiva is only available in italic 
         If family.Name = "Monotype Corsiva" Then
            style = style Or FontStyle.Italic
         End If

         listBox1.Items.Add(New ListBoxFontItem(New Font(family.Name, FontSize, style, GraphicsUnit.Point)))
      Next family
   End Sub 


   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then 
         If (components IsNot Nothing) Then
            components.Dispose()
         End If 

         If (foreColorBrush IsNot Nothing) Then
            foreColorBrush.Dispose()
         End If 
      End If 

      MyBase.Dispose(disposing)
   End Sub 

   Private Sub InitializeComponent()
      Me.listBox1 = New System.Windows.Forms.ListBox()
      Me.SuspendLayout()
      '  
      ' listBox1 
      '  
      Me.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable
      Me.listBox1.Location = New System.Drawing.Point(16, 48)
      Me.listBox1.Name = "listBox1" 
      Me.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
      Me.listBox1.Size = New System.Drawing.Size(256, 134)
      Me.listBox1.TabIndex = 0
      '  
      ' Form1 
      '  
      Me.ClientSize = New System.Drawing.Size(292, 273)
      Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.listBox1})
      Me.Name = "Form1" 
      Me.Text = "Form1" 
      Me.ResumeLayout(False)
   End Sub

   <STAThread()> Shared Sub Main()
      Application.Run(New Form1())
   End Sub 

   Private Sub listBox1_MeasureItem(ByVal sender As Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles listBox1.MeasureItem
      Dim font As Font = CType(listBox1.Items(e.Index), ListBoxFontItem).Font
      Dim stringSize As SizeF = e.Graphics.MeasureString(font.Name, font)

      ' Set the height and width of the item
      e.ItemHeight = CInt(stringSize.Height)
      e.ItemWidth = CInt(stringSize.Width)
   End Sub 

   ' For efficiency, cache the brush used for drawing. 
   Private foreColorBrush As SolidBrush

   Private Sub listBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles listBox1.DrawItem
      Dim brush As Brush

      ' Create the brush using the ForeColor specified by the DrawItemEventArgs 
      If foreColorBrush Is Nothing Then
         foreColorBrush = New SolidBrush(e.ForeColor)
      Else 
         If Not foreColorBrush.Color.Equals(e.ForeColor) Then 
            ' The control's ForeColor has changed, so dispose of the cached brush and 
            ' create a new one.
            foreColorBrush.Dispose()
            foreColorBrush = New SolidBrush(e.ForeColor)
         End If 
      End If 

      ' Select the appropriate brush depending on if the item is selected. 
      ' Since State can be a combinateion (bit-flag) of enum values, you can't use 
      ' "==" to compare them. 
      If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
         brush = SystemBrushes.HighlightText
      Else
         brush = foreColorBrush
      End If 

      ' Perform the painting. 
      Dim font As Font = CType(listBox1.Items(e.Index), ListBoxFontItem).Font
      e.DrawBackground()
      e.Graphics.DrawString(font.Name, font, brush, e.Bounds.X, e.Bounds.Y)
      e.DrawFocusRectangle()
   End Sub 

   
   '  A wrapper class for use with storing Fonts in a ListBox.  Since ListBox uses the 
   '  ToString() of its items for the text it displays, this class is needed to return 
   '  the name of the font, rather than its ToString() value. 
   
   Public Class ListBoxFontItem
      Public Font As Font

      Public Sub New(ByVal f As Font)
         Font = f
      End Sub 

      Public Overrides Function ToString() As String 
         Return Font.Name
      End Function 
   End Class 
End Class

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft