MenuItem.OwnerDraw Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość wskazującą, czy kod, który podajesz, rysuje element menu, czy system Windows rysuje element menu.
public:
property bool OwnerDraw { bool get(); void set(bool value); };
public bool OwnerDraw { get; set; }
member this.OwnerDraw : bool with get, set
Public Property OwnerDraw As Boolean
Wartość właściwości
true
jeżeli element menu ma być rysowany przy użyciu kodu; false
jeśli element menu ma być rysowany przez system Windows. Wartość domyślna to false
.
Przykłady
Poniższy przykład kodu przedstawia menu z elementem menu rysowanym przez właściciela. W tym przykładzie ustawiono OwnerDraw właściwość i użyto instrukcji AddHandler
i AddressOf
operatora w celu wyznaczenia delegata do obsługi DrawItem zdarzenia. Aby uruchomić przykład, wklej go w formularzu, który importuje Systemprzestrzenie nazw , System.Windows.Formsi System.Drawing . Wywołaj metodę InitializeMenu
lub Load
konstruktor formularza.
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
Uwagi
Gdy właściwość jest ustawiona OwnerDraw na true
wartość , musisz obsługiwać cały rysunek elementu menu. Możesz użyć tej funkcji, aby utworzyć własne specjalne menu.