DrawItemEventHandler 委托   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示将处理 ComboBox、ListBox、MenuItem 或 TabControl 控件的 DrawItem 事件的方法。
public delegate void DrawItemEventHandler(System::Object ^ sender, DrawItemEventArgs ^ e);public delegate void DrawItemEventHandler(object sender, DrawItemEventArgs e);public delegate void DrawItemEventHandler(object? sender, DrawItemEventArgs e);type DrawItemEventHandler = delegate of obj * DrawItemEventArgs -> unitPublic Delegate Sub DrawItemEventHandler(sender As Object, e As DrawItemEventArgs)参数
- sender
- Object
事件源。
包含事件数据的 DrawItemEventArgs。
示例
下面的代码示例演示了一个具有所有者绘制的菜单项的菜单。 此示例使用 AddHandler 语句和 AddressOf 运算符来指定委托来处理事件 MenuItem.DrawItem 。 若要运行示例,请将它粘贴到导入 System、System.Windows.Forms 和 System.Drawing 命名空间的窗体中。 确保所有事件都与其事件处理方法相关联。
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.
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));
}
' 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, CInt(stringSize.Width), _
        CInt(stringSize.Height)))
End Sub
注解
创建 DrawItemEventArgs 委托时,需要标识将处理该事件的方法。 若要将事件与事件处理程序关联,请将该委托的一个实例添加到事件中。 除非移除了该委托,否则每当发生该事件时就会调用事件处理程序。 有关事件处理程序委托的详细信息,请参阅 处理和引发事件。
扩展方法
| GetMethodInfo(Delegate) | 获取指示指定委托表示的方法的对象。 |