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 -> unit
Public 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) |
获取指示指定委托表示的方法的对象。 |