ListBox.MeasureItem Olay

Tanım

Sahip tarafından çizilen ListBox bir oluşturulduğunda ve liste öğelerinin boyutları belirlendiğinde gerçekleşir.

C#
public event System.Windows.Forms.MeasureItemEventHandler MeasureItem;
C#
public event System.Windows.Forms.MeasureItemEventHandler? MeasureItem;

Olay Türü

Örnekler

Aşağıdaki kod örneği, özelliğini OwnerDrawVariable olarak ayarlayıp DrawMode ve MeasureItem olaylarını işleyerek DrawItem sahip tarafından çizilmiş ListBox bir örneği gösterir. Ayrıca ve ScrollAlwaysVisible özelliklerini ayarlamayı BorderStyle ve yöntemini kullanmayı AddRange gösterir.

Bu örneği çalıştırmak için ad alanını ve ad alanını içeri aktaran System.Drawing boş bir forma yapıştırın System.Windows.Forms . Formun oluşturucusundan veya Load olay işleme yönteminden çağrısıInitializeOwnerDrawnListBox.

C#
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;
    }
}

Açıklamalar

Bir öğenin olayda DrawItem çizilmeden önce oluşturulacağı boyutu belirtmek üzere bu olay için bir olay işleyicisi oluşturabilirsiniz. Olay yalnızca özelliği olarak ayarlandığında OwnerDrawVariableoluşturulurDrawMode.

Bir öğenin geçerli yüksekliği üst ListBox sınırı 255 pikseldir. ItemHeight bu olayı işlerken özelliğini MeasureItemEventArgs 255'ten büyük bir değere ayarlamak beklenmeyen sonuçlar verebilir.

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ürün Sürümler
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Ayrıca bkz.