如何:配置 ContextMenuStrip 选中边距和图像边距

更新:2007 年 11 月

可以通过设置各种组合的 ShowImageMarginShowCheckMargin 属性,对 ContextMenuStrip 进行自定义。

示例

下面的代码示例演示如何设置和自定义 ContextMenuStrip 选中边距和图像边距。

Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports System.Drawing


...


' This code example demonstrates how to set the check
' and image margins for a ToolStripMenuItem.
Class Form5
   Inherits Form

   Public Sub New()
      ' Size the form to show three wide menu items.
      Me.Width = 500
      Me.Text = "ToolStripContextMenuStrip: Image and Check Margins"

      ' Create a new MenuStrip control.
      Dim ms As New MenuStrip()

      ' Create the ToolStripMenuItems for the MenuStrip control.
      Dim bothMargins As New ToolStripMenuItem("BothMargins")
      Dim imageMarginOnly As New ToolStripMenuItem("ImageMargin")
      Dim checkMarginOnly As New ToolStripMenuItem("CheckMargin")
      Dim noMargins As New ToolStripMenuItem("NoMargins")

      ' Customize the DropDowns menus.
      ' This ToolStripMenuItem has an image margin 
      ' and a check margin.
      bothMargins.DropDown = CreateCheckImageContextMenuStrip()
      CType(bothMargins.DropDown, ContextMenuStrip).ShowImageMargin = True
      CType(bothMargins.DropDown, ContextMenuStrip).ShowCheckMargin = True

      ' This ToolStripMenuItem has only an image margin.
      imageMarginOnly.DropDown = CreateCheckImageContextMenuStrip()
      CType(imageMarginOnly.DropDown, ContextMenuStrip).ShowImageMargin = True
      CType(imageMarginOnly.DropDown, ContextMenuStrip).ShowCheckMargin = False

      ' This ToolStripMenuItem has only a check margin.
      checkMarginOnly.DropDown = CreateCheckImageContextMenuStrip()
      CType(checkMarginOnly.DropDown, ContextMenuStrip).ShowImageMargin = False
      CType(checkMarginOnly.DropDown, ContextMenuStrip).ShowCheckMargin = True

      ' This ToolStripMenuItem has no image and no check margin.
      noMargins.DropDown = CreateCheckImageContextMenuStrip()
      CType(noMargins.DropDown, ContextMenuStrip).ShowImageMargin = False
      CType(noMargins.DropDown, ContextMenuStrip).ShowCheckMargin = False

      ' Populate the MenuStrip control with the ToolStripMenuItems.
      ms.Items.Add(bothMargins)
      ms.Items.Add(imageMarginOnly)
      ms.Items.Add(checkMarginOnly)
      ms.Items.Add(noMargins)

      ' Dock the MenuStrip control to the top of the form.
      ms.Dock = DockStyle.Top

      ' Add the MenuStrip control to the controls collection last.
      ' This is important for correct placement in the z-order.
      Me.Controls.Add(ms)
    End Sub

   ' This utility method creates a Bitmap for use in 
   ' a ToolStripMenuItem's image margin.
    Friend Function CreateSampleBitmap() As Bitmap

        ' The Bitmap is a smiley face.
        Dim sampleBitmap As New Bitmap(32, 32)
        Dim g As Graphics = Graphics.FromImage(sampleBitmap)

        Dim p As New Pen(ProfessionalColors.ButtonPressedBorder)
        Try
            ' Set the Pen width.
            p.Width = 4

            ' Set up the mouth geometry.
            Dim curvePoints() As Point = _
            {New Point(4, 14), New Point(16, 24), New Point(28, 14)}

            ' Draw the mouth.
            g.DrawCurve(p, curvePoints)

            ' Draw the eyes.
            g.DrawEllipse(p, New Rectangle(New Point(7, 4), New Size(3, 3)))
            g.DrawEllipse(p, New Rectangle(New Point(22, 4), New Size(3, 3)))
        Finally
            p.Dispose()
        End Try

        Return sampleBitmap
    End Function

   ' This utility method creates a ContextMenuStrip control
   ' that has four ToolStripMenuItems showing the four 
   ' possible combinations of image and check margins.
   Friend Function CreateCheckImageContextMenuStrip() As ContextMenuStrip
      ' Create a new ContextMenuStrip control.
      Dim checkImageContextMenuStrip As New ContextMenuStrip()

      ' Create a ToolStripMenuItem with a
      ' check margin and an image margin.
      Dim yesCheckYesImage As New ToolStripMenuItem("Check, Image")
      yesCheckYesImage.Checked = True
      yesCheckYesImage.Image = CreateSampleBitmap()

      ' Create a ToolStripMenuItem with no
      ' check margin and with an image margin.
      Dim noCheckYesImage As New ToolStripMenuItem("No Check, Image")
      noCheckYesImage.Checked = False
      noCheckYesImage.Image = CreateSampleBitmap()

      ' Create a ToolStripMenuItem with a
      ' check margin and without an image margin.
      Dim yesCheckNoImage As New ToolStripMenuItem("Check, No Image")
      yesCheckNoImage.Checked = True

      ' Create a ToolStripMenuItem with no
      ' check margin and no image margin.
      Dim noCheckNoImage As New ToolStripMenuItem("No Check, No Image")
      noCheckNoImage.Checked = False

      ' Add the ToolStripMenuItems to the ContextMenuStrip control.
      checkImageContextMenuStrip.Items.Add(yesCheckYesImage)
      checkImageContextMenuStrip.Items.Add(noCheckYesImage)
      checkImageContextMenuStrip.Items.Add(yesCheckNoImage)
      checkImageContextMenuStrip.Items.Add(noCheckNoImage)

      Return checkImageContextMenuStrip
    End Function
End Class
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;


...


// This code example demonstrates how to set the check
// and image margins for a ToolStripMenuItem.
class Form5 : Form
{
    public Form5()
    {
        // Size the form to show three wide menu items.
        this.Width = 500;
        this.Text = "ToolStripContextMenuStrip: Image and Check Margins";

        // Create a new MenuStrip control.
        MenuStrip ms = new MenuStrip();

        // Create the ToolStripMenuItems for the MenuStrip control.
        ToolStripMenuItem bothMargins = new ToolStripMenuItem("BothMargins");
        ToolStripMenuItem imageMarginOnly = new ToolStripMenuItem("ImageMargin");
        ToolStripMenuItem checkMarginOnly = new ToolStripMenuItem("CheckMargin");
        ToolStripMenuItem noMargins = new ToolStripMenuItem("NoMargins");

        // Customize the DropDowns menus.
        // This ToolStripMenuItem has an image margin 
        // and a check margin.
        bothMargins.DropDown = CreateCheckImageContextMenuStrip();
        ((ContextMenuStrip)bothMargins.DropDown).ShowImageMargin = true;
        ((ContextMenuStrip)bothMargins.DropDown).ShowCheckMargin = true;

        // This ToolStripMenuItem has only an image margin.
        imageMarginOnly.DropDown = CreateCheckImageContextMenuStrip();
        ((ContextMenuStrip)imageMarginOnly.DropDown).ShowImageMargin = true;
        ((ContextMenuStrip)imageMarginOnly.DropDown).ShowCheckMargin = false;

        // This ToolStripMenuItem has only a check margin.
        checkMarginOnly.DropDown = CreateCheckImageContextMenuStrip();
        ((ContextMenuStrip)checkMarginOnly.DropDown).ShowImageMargin = false;
        ((ContextMenuStrip)checkMarginOnly.DropDown).ShowCheckMargin = true;

        // This ToolStripMenuItem has no image and no check margin.
        noMargins.DropDown = CreateCheckImageContextMenuStrip();
        ((ContextMenuStrip)noMargins.DropDown).ShowImageMargin = false;
        ((ContextMenuStrip)noMargins.DropDown).ShowCheckMargin = false;

        // Populate the MenuStrip control with the ToolStripMenuItems.
        ms.Items.Add(bothMargins);
        ms.Items.Add(imageMarginOnly);
        ms.Items.Add(checkMarginOnly);
        ms.Items.Add(noMargins);

        // Dock the MenuStrip control to the top of the form.
        ms.Dock = DockStyle.Top;

        // Add the MenuStrip control to the controls collection last.
        // This is important for correct placement in the z-order.
        this.Controls.Add(ms);
    }

    // This utility method creates a Bitmap for use in 
    // a ToolStripMenuItem's image margin.
    internal Bitmap CreateSampleBitmap()
    {
        // The Bitmap is a smiley face.
        Bitmap sampleBitmap = new Bitmap(32, 32);
        Graphics g = Graphics.FromImage(sampleBitmap);

        using (Pen p = new Pen(ProfessionalColors.ButtonPressedBorder))
        {
            // Set the Pen width.
            p.Width = 4;

            // Set up the mouth geometry.
            Point[] curvePoints = new Point[]{
                new Point(4,14), 
                new Point(16,24), 
                new Point(28,14)};

            // Draw the mouth.
            g.DrawCurve(p, curvePoints);

            // Draw the eyes.
            g.DrawEllipse(p, new Rectangle(new Point(7, 4), new Size(3, 3)));
            g.DrawEllipse(p, new Rectangle(new Point(22, 4), new Size(3, 3)));
        }

        return sampleBitmap;
    }

    // This utility method creates a ContextMenuStrip control
    // that has four ToolStripMenuItems showing the four 
    // possible combinations of image and check margins.
    internal ContextMenuStrip CreateCheckImageContextMenuStrip()
    {
        // Create a new ContextMenuStrip control.
        ContextMenuStrip checkImageContextMenuStrip = new ContextMenuStrip();

        // Create a ToolStripMenuItem with a
        // check margin and an image margin.
        ToolStripMenuItem yesCheckYesImage = 
            new ToolStripMenuItem("Check, Image");
        yesCheckYesImage.Checked = true;
        yesCheckYesImage.Image = CreateSampleBitmap();

        // Create a ToolStripMenuItem with no
        // check margin and with an image margin.
        ToolStripMenuItem noCheckYesImage = 
            new ToolStripMenuItem("No Check, Image");
        noCheckYesImage.Checked = false;
        noCheckYesImage.Image = CreateSampleBitmap();

        // Create a ToolStripMenuItem with a
        // check margin and without an image margin.
        ToolStripMenuItem yesCheckNoImage = 
            new ToolStripMenuItem("Check, No Image");
        yesCheckNoImage.Checked = true;

        // Create a ToolStripMenuItem with no
        // check margin and no image margin.
        ToolStripMenuItem noCheckNoImage = 
            new ToolStripMenuItem("No Check, No Image");
        noCheckNoImage.Checked = false;

        // Add the ToolStripMenuItems to the ContextMenuStrip control.
        checkImageContextMenuStrip.Items.Add(yesCheckYesImage);
        checkImageContextMenuStrip.Items.Add(noCheckYesImage);
        checkImageContextMenuStrip.Items.Add(yesCheckNoImage);
        checkImageContextMenuStrip.Items.Add(noCheckNoImage);

        return checkImageContextMenuStrip;
    }
}

编译代码

此示例要求:

  • 对 System.Design、System.Drawing 和 System.Windows.Forms 程序集的引用。

有关从 Visual Basic 或 Visual C# 的命令行生成此示例的信息,请参见从命令行生成 (Visual Basic)在命令行上使用 csc.exe 生成。也可以通过将代码粘贴到新项目,在 Visual Studio 中生成此示例。 如何:使用 Visual Studio 编译和运行完整的 Windows 窗体代码示例
如何:使用 Visual Studio 编译和运行完整的 Windows 窗体代码示例
如何:使用 Visual Studio 编译和运行完整的 Windows 窗体代码示例
如何:使用 Visual Studio 编译和运行完整的 Windows 窗体代码示例
如何:使用 Visual Studio 编译和运行完整的 Windows 窗体代码示例

请参见

任务

如何:启用 ContextMenuStrip 控件中的选中边距和图像边距

参考

ContextMenuStrip

ToolStripDropDown

其他资源

ToolStrip 控件(Windows 窗体)