Evaluar y enviar comentarios
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
DrawItemEventHandler (Delegado)

Actualización: noviembre 2007

Representa el método que controlará el evento DrawItem de un control ComboBox, ListBox, MenuItem o TabControl.

Espacio de nombres:  System.Windows.Forms
Ensamblado:  System.Windows.Forms (en System.Windows.Forms.dll)
Visual Basic (Declaración)
Public Delegate Sub DrawItemEventHandler ( _
    sender As Object, _
    e As DrawItemEventArgs _
)
Visual Basic (Uso)
Dim instance As New DrawItemEventHandler(AddressOf HandlerMethod)
C#
public delegate void DrawItemEventHandler(
    Object sender,
    DrawItemEventArgs e
)
Visual C++
public delegate void DrawItemEventHandler(
    Object^ sender, 
    DrawItemEventArgs^ e
)
J#
/** @delegate */
public delegate void DrawItemEventHandler(
    Object sender,
    DrawItemEventArgs e
)
JScript
JScript no admite delegados.

Parámetros

sender
Tipo: System..::.Object
Origen del evento.
e
Tipo: System.Windows.Forms..::.DrawItemEventArgs
DrawItemEventArgs que contiene los datos de eventos.

Cuando se crea un delegado de DrawItemEventArgs, se identifica el método que controlará el evento. Para asociar el evento a su controlador de eventos, agregue una instancia del delegado al evento. Siempre que se produzca el evento, se llamará a su controlador, a menos que se quite el delegado. Para obtener más información acerca de los delegados del controlador de eventos, vea Eventos y delegados.

En el siguiente ejemplo de código se muestra un menú con un elemento de menú dibujado por el propietario. En este ejemplo se usa la instrucción AddHandler y el operador AddressOf para designar un delegado con el fin de controlar el evento MenuItem..::.DrawItem. Para ejecutar el ejemplo, pegue el código en un formulario que importe los espacios de nombres System, System.Windows.Forms y System.Drawing. Asegúrese de que todos los eventos estén asociados a sus métodos de control de eventos.

Visual Basic
' 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
C#
    // 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));
    }
Visual C++
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) );
   }
J#
// 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 Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2012 Microsoft. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker