DrawItemEventHandler 委托

表示将处理 ComboBoxListBoxMenuItemTabControl 控件的 DrawItem 事件的方法。

**命名空间:**System.Windows.Forms
**程序集:**System.Windows.Forms(在 system.windows.forms.dll 中)

语法

声明
Public Delegate Sub DrawItemEventHandler ( _
    sender As Object, _
    e As DrawItemEventArgs _
)
用法
Dim instance As New DrawItemEventHandler(AddressOf HandlerMethod)
public delegate void DrawItemEventHandler (
    Object sender,
    DrawItemEventArgs e
)
public delegate void DrawItemEventHandler (
    Object^ sender, 
    DrawItemEventArgs^ e
)
/** @delegate */
public delegate void DrawItemEventHandler (
    Object sender, 
    DrawItemEventArgs e
)
JScript 支持使用委托,但不支持进行新的声明。

参数

  • sender
    事件源。

备注

当创建 DrawItemEventArgs 委托时,将标识处理事件的方法。若要使该事件与事件处理程序相关联,请将该委托的一个实例添加到事件中。除非移除了该委托,否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息,请参见 事件和委托

示例

下面的代码示例阐释了一个包含所有者描述的菜单项的菜单。该示例使用 AddHandler 语句和 AddressOf 运算符来指定一个委托,以处理 MenuItem.DrawItem 事件。要运行该示例,请将它粘贴到一个导入 System、System.Windows.Forms 和 System.Drawing 命名空间的窗体中。确保所有事件均与其事件处理方法相关联。

' Declare the MainMenu control.
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu

' Declare MenuItem2 as With-Events because it will be user drawn.
Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem


Private Sub InitializeMenu()

    ' Create MenuItem1, which will be drawn by the operating system.
    Dim MenuItem1 As New MenuItem("Regular Menu Item")

    ' Create MenuItem2.
    MenuItem2 = New MenuItem("Custom Menu Item")

    ' Set OwnerDraw property to true. This requires handling the
    ' DrawItem event for this menu item.
    MenuItem2.OwnerDraw = True

    'Add the event-handler delegate to handle the DrawItem event.
    AddHandler MenuItem2.DrawItem, New DrawItemEventHandler(AddressOf DrawCustomMenuItem)

    ' Add the items to the menu.
    MainMenu1 = New MainMenu(New MenuItem() {MenuItem1, MenuItem2})

    ' Add the menu to the form.
    Me.Menu = Me.MainMenu1
End Sub

' Draw the custom menu item.
Private Sub DrawCustomMenuItem(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.DrawItemEventArgs)

    ' Cast the sender to MenuItem so you can access text property.
    Dim customItem As MenuItem = CType(sender, MenuItem)

    ' Create a Brush and a Font to draw the MenuItem.
    Dim aBrush As System.Drawing.Brush = System.Drawing.Brushes.DarkMagenta
    Dim aFont As New Font("Garamond", 10, FontStyle.Italic, _
        GraphicsUnit.Point)

    ' Get the size of the text to use later to draw an ellipse
    ' around the item.
    Dim stringSize As SizeF = e.Graphics.MeasureString( _
        customItem.Text, aFont)

    ' Draw the item and then draw the ellipse.
    e.Graphics.DrawString(customItem.Text, aFont, _
        aBrush, e.Bounds.X, e.Bounds.Y)
    e.Graphics.DrawEllipse(New Pen(System.Drawing.Color.Black, 2), _
        New Rectangle(e.Bounds.X, e.Bounds.Y, stringSize.Width, _
        stringSize.Height))
End Sub
// Declare the MainMenu control.
internal System.Windows.Forms.MainMenu MainMenu1;

// Declare MenuItem2 as With-Events because it will be user drawn.
internal System.Windows.Forms.MenuItem MenuItem2;


private void InitializeMenu()
{

    // Create MenuItem1, which will be drawn by the operating system.
    MenuItem MenuItem1 = new MenuItem("Regular Menu Item");

    // Create MenuItem2.
    MenuItem2 = new MenuItem("Custom Menu Item");

    // Set OwnerDraw property to true. This requires handling the
    // DrawItem event for this menu item.
    MenuItem2.OwnerDraw = true;

    //Add the event-handler delegate to handle the DrawItem event.
    MenuItem2.DrawItem += new DrawItemEventHandler(DrawCustomMenuItem);
    
  // Add the items to the menu.
    MainMenu1 = new MainMenu(new MenuItem[]{MenuItem1, MenuItem2});                                                                                                                      

    // Add the menu to the form.
    this.Menu = this.MainMenu1;
}

// Draw the custom menu item.
private void DrawCustomMenuItem(object sender, 
    DrawItemEventArgs e)
{

    // Cast the sender to MenuItem so you can access text property.
    MenuItem customItem = (MenuItem) sender;

    // Create a Brush and a Font to draw the MenuItem.
    System.Drawing.Brush aBrush = System.Drawing.Brushes.DarkMagenta;
    Font aFont = new Font("Garamond", 10, 
        FontStyle.Italic, GraphicsUnit.Point);

    // Get the size of the text to use later to draw an ellipse
    // around the item.
    SizeF stringSize = e.Graphics.MeasureString(
        customItem.Text, aFont);

    // Draw the item and then draw the ellipse.
    e.Graphics.DrawString(customItem.Text, aFont, 
        aBrush, e.Bounds.X, e.Bounds.Y);
    e.Graphics.DrawEllipse(new Pen(System.Drawing.Color.Black, 2),
        new Rectangle(e.Bounds.X, e.Bounds.Y, 
        (System.Int32)stringSize.Width,
        (System.Int32)stringSize.Height));
}
internal:
   // Declare the MainMenu control.
   System::Windows::Forms::MainMenu^ MainMenu1;

   // Declare MenuItem2 as With-Events because it will be user drawn.
   System::Windows::Forms::MenuItem^ MenuItem2;

private:
   void InitializeMenu()
   {
      
      // Create MenuItem1, which will be drawn by the operating system.
      MenuItem^ MenuItem1 = gcnew MenuItem( "Regular Menu Item" );
      
      // Create MenuItem2.
      MenuItem2 = gcnew MenuItem( "Custom Menu Item" );
      
      // Set OwnerDraw property to true. This requires handling the
      // DrawItem event for this menu item.
      MenuItem2->OwnerDraw = true;
      
      //Add the event-handler delegate to handle the DrawItem event.
      MenuItem2->DrawItem += gcnew DrawItemEventHandler( this, &Form1::DrawCustomMenuItem );
      
      // Add the items to the menu.
      array<MenuItem^>^temp0 = {MenuItem1,MenuItem2};
      MainMenu1 = gcnew MainMenu( temp0 );
      
      // Add the menu to the form.
      this->Menu = this->MainMenu1;
   }

   // Draw the custom menu item.
   void DrawCustomMenuItem( Object^ sender, DrawItemEventArgs^ e )
   {
      // Cast the sender to MenuItem so you can access text property.
      MenuItem^ customItem = dynamic_cast<MenuItem^>(sender);
      
      // Create a Brush and a Font to draw the MenuItem.
      System::Drawing::Brush^ aBrush = System::Drawing::Brushes::DarkMagenta;
      System::Drawing::Font^ aFont = gcnew System::Drawing::Font( "Garamond",10,FontStyle::Italic,GraphicsUnit::Point );
      
      // Get the size of the text to use later to draw an ellipse
      // around the item.
      SizeF stringSize = e->Graphics->MeasureString( customItem->Text, aFont );
      
      // Draw the item and then draw the ellipse.
      e->Graphics->DrawString( customItem->Text, aFont, aBrush, (float)e->Bounds.X, (float)e->Bounds.Y );
      e->Graphics->DrawEllipse( gcnew Pen( System::Drawing::Color::Black,2 ), Rectangle(e->Bounds.X,e->Bounds.Y,(System::Int32)stringSize.Width,(System::Int32)stringSize.Height) );
   }
// Declare the MainMenu control.
System.Windows.Forms.MainMenu mainMenu1;

// Declare MenuItem2 as With-Events because it will be user drawn.
System.Windows.Forms.MenuItem menuItem2;

private void InitializeMenu()
{
    // Create MenuItem1, which will be drawn by the operating system.
    MenuItem menuItem1 = new MenuItem("Regular Menu Item");
    // Create MenuItem2.
    menuItem2 = new MenuItem("Custom Menu Item");
    // Set OwnerDraw property to true. This requires handling the
    // DrawItem event for this menu item.
    menuItem2.set_OwnerDraw(true);
    //Add the event-handler delegate to handle the DrawItem event.
    menuItem2.add_DrawItem(new DrawItemEventHandler(DrawCustomMenuItem));
    // Add the items to the menu.
    mainMenu1 = new MainMenu(new MenuItem[] { menuItem1, menuItem2 });
    // Add the menu to the form.
    this.set_Menu(this.mainMenu1);
} //InitializeMenu

// Draw the custom menu item.
private void DrawCustomMenuItem(Object sender, DrawItemEventArgs e)
{
    // Cast the sender to MenuItem so you can access text property.
    MenuItem customItem = (MenuItem)sender;
    // Create a Brush and a Font to draw the MenuItem.
    System.Drawing.Brush aBrush = System.Drawing.Brushes.get_DarkMagenta();
    Font aFont =
        new Font("Garamond", 10, FontStyle.Italic, GraphicsUnit.Point);
    // Get the size of the text to use later to draw an ellipse
    // around the item.
    SizeF stringSize =
        e.get_Graphics().MeasureString(customItem.get_Text(), aFont);
    // Draw the item and then draw the ellipse.
    e.get_Graphics().
        DrawString(customItem.get_Text(), aFont, aBrush,
        e.get_Bounds().get_X(), e.get_Bounds().get_Y());
    e.get_Graphics().
        DrawEllipse(new Pen(System.Drawing.Color.get_Black(), 2),
        new Rectangle(e.get_Bounds().get_X(), e.get_Bounds().get_Y(),
        System.Convert.ToInt32((System.Int32)stringSize.get_Width()),
        System.Convert.ToInt32((System.Int32)stringSize.get_Height())));
} //DrawCustomMenuItem

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

System.Windows.Forms 命名空间
DrawItemEventArgs 类
ComboBox 类
ListBox
MenuItem
TabControl