ListBox.MeasureItem ListBox.MeasureItem ListBox.MeasureItem ListBox.MeasureItem Event

定義

發生於建立主控描繪 ListBox 和決定清單項目的大小時。Occurs when an owner-drawn ListBox is created and the sizes of the list items are determined.

public:
 event System::Windows::Forms::MeasureItemEventHandler ^ MeasureItem;
public event System.Windows.Forms.MeasureItemEventHandler MeasureItem;
member this.MeasureItem : System.Windows.Forms.MeasureItemEventHandler 
Public Custom Event MeasureItem As MeasureItemEventHandler 

範例

下列程式碼範例會ListBox示範如何DrawModeDrawItem屬性設定為並處理和OwnerDrawVariable MeasureItem事件, 藉以進行主控繪製。The following code example demonstrates an owner-drawn ListBox by setting the DrawMode property to OwnerDrawVariable and handling the DrawItem and MeasureItem events. 它也會示範如何BorderStyle設定ScrollAlwaysVisible和屬性, 以及AddRange如何使用方法。It also demonstrates setting the BorderStyle and ScrollAlwaysVisible properties and using the AddRange method.

若要執行此範例, 請將它貼入匯入System.Drawing命名空間System.Windows.Forms和命名空間的空白表單中。To run this example, paste it in an empty form that imports the System.Drawing namespace and the System.Windows.Forms namespace. InitializeOwnerDrawnListBox表單的函式或Load事件處理方法呼叫。Call InitializeOwnerDrawnListBox from the form's constructor or Load event-handling method.

internal:
   System::Windows::Forms::ListBox^ ListBox1;

private:
   void InitializeOwnerDrawnListBox()
   {
      this->ListBox1 = gcnew System::Windows::Forms::ListBox;
      
      // Set the location and size.
      ListBox1->Location = Point(20,20);
      ListBox1->Size = System::Drawing::Size( 240, 240 );
      
      // Populate the ListBox.ObjectCollection property 
      // with several strings, using the AddRange method.
      array<Object^>^temp0 = {"System.Windows.Forms","System.Drawing","System.Xml","System.Net","System.Runtime.Remoting","System.Web"};
      this->ListBox1->Items->AddRange( temp0 );
      
      // Turn off the scrollbar.
      ListBox1->ScrollAlwaysVisible = false;
      
      // Set the border style to a single, flat border.
      ListBox1->BorderStyle = BorderStyle::FixedSingle;
      
      // Set the DrawMode property to the OwnerDrawVariable value. 
      // This means the MeasureItem and DrawItem events must be 
      // handled.
      ListBox1->DrawMode = DrawMode::OwnerDrawVariable;
      ListBox1->MeasureItem += gcnew MeasureItemEventHandler( this, &Form1::ListBox1_MeasureItem );
      ListBox1->DrawItem += gcnew DrawItemEventHandler( this, &Form1::ListBox1_DrawItem );
      this->Controls->Add( this->ListBox1 );
   }

   // Handle the DrawItem event for an owner-drawn ListBox.
   void ListBox1_DrawItem( Object^ /*sender*/, DrawItemEventArgs^ e )
   {
      // If the item is the selected item, then draw the rectangle
      // filled in blue. The item is selected when a bitwise And  
      // of the State property and the DrawItemState.Selected 
      // property is true.
      if ( (e->State & DrawItemState::Selected) == DrawItemState::Selected )
      {
         e->Graphics->FillRectangle( Brushes::CornflowerBlue, e->Bounds );
      }
      else
      {
         
         // Otherwise, draw the rectangle filled in beige.
         e->Graphics->FillRectangle( Brushes::Beige, e->Bounds );
      }
      
      // Draw a rectangle in blue around each item.
      e->Graphics->DrawRectangle( Pens::Blue, e->Bounds );
      
      // Draw the text in the item.
      e->Graphics->DrawString( ListBox1->Items[ e->Index ]->ToString(), this->Font, Brushes::Black, (float)e->Bounds.X, (float)e->Bounds.Y );
      
      // Draw the focus rectangle around the selected item.
      e->DrawFocusRectangle();
   }


   // Handle the MeasureItem event for an owner-drawn ListBox.
   void ListBox1_MeasureItem( Object^ sender, MeasureItemEventArgs^ e )
   {
      
      // Cast the sender object back to ListBox type.
      ListBox^ theListBox = dynamic_cast<ListBox^>(sender);
      
      // Get the string contained in each item.
      String^ itemString = dynamic_cast<String^>(theListBox->Items[ e->Index ]);
      
      // Split the string at the " . "  character.
      array<Char>^temp1 = {'.'};
      array<String^>^resultStrings = itemString->Split( temp1 );
      
      // If the string contains more than one period, increase the 
      // height by ten pixels; otherwise, increase the height by 
      // five pixels.
      if ( resultStrings->Length > 2 )
      {
         e->ItemHeight += 10;
      }
      else
      {
         e->ItemHeight += 5;
      }
   }
internal System.Windows.Forms.ListBox ListBox1;

private void InitializeOwnerDrawnListBox()
{
	this.ListBox1 = new System.Windows.Forms.ListBox();

	// Set the location and size.
	ListBox1.Location = new Point(20, 20);
	ListBox1.Size = new Size(240, 240);

	// Populate the ListBox.ObjectCollection property 
	// with several strings, using the AddRange method.
	this.ListBox1.Items.AddRange(new object[]{"System.Windows.Forms", 
		"System.Drawing", "System.Xml", "System.Net", "System.Runtime.Remoting", 
		"System.Web"});

	// Turn off the scrollbar.
	ListBox1.ScrollAlwaysVisible = false;

	// Set the border style to a single, flat border.
	ListBox1.BorderStyle = BorderStyle.FixedSingle;

	// Set the DrawMode property to the OwnerDrawVariable value. 
	// This means the MeasureItem and DrawItem events must be 
	// handled.
	ListBox1.DrawMode = DrawMode.OwnerDrawVariable;
	ListBox1.MeasureItem += 
		new MeasureItemEventHandler(ListBox1_MeasureItem);
	ListBox1.DrawItem += new DrawItemEventHandler(ListBox1_DrawItem);
	this.Controls.Add(this.ListBox1);
	
}


// Handle the DrawItem event for an owner-drawn ListBox.
private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{

	// If the item is the selected item, then draw the rectangle
	// filled in blue. The item is selected when a bitwise And  
	// of the State property and the DrawItemState.Selected 
	// property is true.
	if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
	{
		e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds);
	}
	else
	{
		// Otherwise, draw the rectangle filled in beige.
		e.Graphics.FillRectangle(Brushes.Beige, e.Bounds);
	}

	// Draw a rectangle in blue around each item.
	e.Graphics.DrawRectangle(Pens.Blue, e.Bounds);

	// Draw the text in the item.
	e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(),
		this.Font, Brushes.Black, e.Bounds.X, e.Bounds.Y);

	// Draw the focus rectangle around the selected item.
	e.DrawFocusRectangle();
}

// Handle the MeasureItem event for an owner-drawn ListBox.
private void ListBox1_MeasureItem(object sender, 
	MeasureItemEventArgs e)
{

	// Cast the sender object back to ListBox type.
	ListBox theListBox = (ListBox) sender;

	// Get the string contained in each item.
	string itemString = (string) theListBox.Items[e.Index];

	// Split the string at the " . "  character.
	string[] resultStrings = itemString.Split('.');

	// If the string contains more than one period, increase the 
	// height by ten pixels; otherwise, increase the height by 
	// five pixels.
	if (resultStrings.Length>2)
	{
		e.ItemHeight += 10;
	}
	else
	{
		e.ItemHeight += 5;
	}

}

Friend WithEvents ListBox1 As System.Windows.Forms.ListBox

Private Sub InitializeOwnerDrawnListBox()
    Me.ListBox1 = New System.Windows.Forms.ListBox

    ' Set the location and size.
    ListBox1.Location = New Point(20, 20)
    ListBox1.Size = New Size(240, 240)

    ' Populate the ListBox.ObjectCollection property 
    ' with several strings, using the AddRange method.
    Me.ListBox1.Items.AddRange(New Object() _
        {"System.Windows.Forms", "System.Drawing", "System.Xml", _
        "System.Net", "System.Runtime.Remoting", "System.Web"})

    ' Turn off the scrollbar.
    ListBox1.ScrollAlwaysVisible = False

    ' Set the border style to a single, flat border.
    ListBox1.BorderStyle = BorderStyle.FixedSingle

    ' Set the DrawMode property to the OwnerDrawVariable value. 
    ' This means the MeasureItem and DrawItem events must be 
    ' handled.
    ListBox1.DrawMode = DrawMode.OwnerDrawVariable
    Me.Controls.Add(Me.ListBox1)
End Sub


' Handle the DrawItem event for an owner-drawn ListBox.
Private Sub ListBox1_DrawItem(ByVal sender As Object, _
    ByVal e As DrawItemEventArgs) Handles ListBox1.DrawItem

    ' If the item is the selected item, then draw the rectangle filled in
    ' blue. The item is selected when a bitwise And of the State property
    ' and the DrawItemState.Selected property is true. 
    If (e.State And DrawItemState.Selected = DrawItemState.Selected) Then
        e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds)
    Else
        ' Otherwise, draw the rectangle filled in beige.
        e.Graphics.FillRectangle(Brushes.Beige, e.Bounds)
    End If

    ' Draw a rectangle in blue around each item.
    e.Graphics.DrawRectangle(Pens.Blue, e.Bounds)

    ' Draw the text in the item.
    e.Graphics.DrawString(Me.ListBox1.Items(e.Index), Me.Font, _
        Brushes.Black, e.Bounds.X, e.Bounds.Y)

    ' Draw the focus rectangle around the selected item.
    e.DrawFocusRectangle()
End Sub

' Handle the MeasureItem event for an owner-drawn ListBox.
Private Sub ListBox1_MeasureItem(ByVal sender As Object, _
    ByVal e As MeasureItemEventArgs) Handles ListBox1.MeasureItem

    ' Cast the sender object back to ListBox type.
    Dim theListBox As ListBox = CType(sender, ListBox)

    ' Get the string contained in each item.
    Dim itemString As String = CType(theListBox.Items(e.Index), String)

    ' Split the string at the " . "  character.
    Dim resultStrings() As String = itemString.Split(".")

    ' If the string contains more than one period, increase the 
    ' height by ten pixels; otherwise, increase the height by 
    ' five pixels.
    If (resultStrings.Length > 2) Then
        e.ItemHeight += 10
    Else
        e.ItemHeight += 5
    End If

End Sub

備註

您可以為這個事件建立事件處理常式, 以指定在DrawItem事件中繪製專案之前的大小。You can create an event handler for this event to specify the size an item will be made before it is drawn in the DrawItem event. 只有當DrawMode屬性設定為OwnerDrawVariable時, 才會引發事件。The event is only raised when the DrawMode property is set to OwnerDrawVariable.

ListBox專案的最大有效高度為255圖元。The maximum valid height of a ListBox item is 255 pixels. 在處理這個事件時MeasureItemEventArgs , 將的屬性設定為大於255的值可能會產生非預期的結果。ItemHeightSetting the ItemHeight property of the MeasureItemEventArgs to a value greater than 255 when handling this event may yield unexpected results.

如需處理事件的詳細資訊, 請參閱處理和引發事件For more information about handling events, see Handling and Raising Events.

適用於

另請參閱