4-向窗体添加菜单


Windows 窗体支持菜单和上下文菜单。主菜单在菜单栏上显示,菜单栏位于窗体标题栏的紧下方。菜单栏包含用于将相关子菜单项分组的顶级菜单项。例如,通过单击“文件”顶级菜单项,可以显示与文件操作相关的菜单项。菜单项通常显示为应用程序的命令(如“新建”和“打开”),但是它们也可以显示为分隔条和子菜单项。可以在菜单项的旁边显示选中标记,以显示应用程序中命令的状态或功能的状态。在 Windows 窗体中,主菜单由 MainMenu 控件表示。

可为窗体的特定控件或区域显示上下文菜单。通常通过单击鼠标右键访问它们。在 Windows 窗体中,上下文菜单由 ContextMenu 控件表示。

ContextMenu 和 MainMenu 从 Menu 派生。它们共享许多属性、方法和事件。

下面的代码演示如何向窗体添加 MainMenu。

C# source:
MainMenu mainMenu = new MainMenu();
this.Menu = mainMenu;

VB source:
Dim mainMenu As New MainMenu
Me.Menu = mainMenu 

 
向控件添加上下文菜单
下面的代码演示如何创建 ContextMenu 并将其分配到控件。

C#
ContextMenu label1ContextMenu = new ContextMenu();
Label label1 = new Label();
label1.ContextMenu = label1ContextMenu;

VB
Dim label1ContextMenu As New ContextMenu
Dim label1 As New Label
label1.ContextMenu = label1ContextMenu

 
添加菜单项
在下面的示例中,将 File 菜单项添加到 MainMenu 中。File 菜单项包含名为 Open 和 Exit 的子菜单项。
C#
//Add File Menu
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("&Open..."));
miFile.MenuItems.Add("-");     // Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit"));

VB
'Add File Menu
Dim miFile As MenuItem = mainMenu.MenuItems.Add("&File")
miFile.MenuItems.Add(new MenuItem("&Open..."))
miFile.MenuItems.Add("-")     ' Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit"))


下面的代码演示如何为在前面代码示例中创建的 Open 和 Exit 菜单项处理 Click 事件。

C# 
....
//Add File Menu
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("&Open...", new EventHandler(this.FileOpen_Clicked), Shortcut.CtrlO));
miFile.MenuItems.Add("-");     // Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));
....

//File->Exit Menu item handler
private void FileExit_Clicked(object sender, System.EventArgs e) {
    this.Close();
}

//File->Open Menu item handler
private void FileOpen_Clicked(object sender, System.EventArgs e) {
    MessageBox.Show("And why would this open a file?");
}

....

VB
....
'Add File Menu
Dim miFile As MenuItem = mainMenu.MenuItems.Add("&File")
miFile.MenuItems.Add(new MenuItem("&Open...", new EventHandler(AddressOf Me.FileOpen_Clicked)))
miFile.MenuItems.Add("-")     ' Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit", new EventHandler(AddressOf Me.FileExit_Clicked)))
....

'File->Exit Menu item handler
Private Sub FileExit_Clicked(sender As object, e As System.EventArgs)
    Me.Close
End Sub

'File->Open Menu item handler
Private Sub FileOpen_Clicked(sender As object, e As System.EventArgs)
    MessageBox.Show("And why would this open a file?")
End Sub

....

 
添加子菜单
下面的示例演示如何创建子菜单。
C#

//Add Format Menu
MenuItem miFormat = mainMenu.MenuItems.Add("F&ormat");

//Font Face sub-menu
mmiSansSerif = new MenuItem("&1. " + sansSerifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiSerif = new MenuItem("&2. " + serifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiMonoSpace = new MenuItem("&3. " + monoSpaceFontFamily.Name, new EventHandler(this.FormatFont_Clicked));

miFormat.MenuItems.Add( "Font &Face",
                        (new MenuItem[]{ mmiSansSerif, mmiSerif, mmiMonoSpace })
                        );

//Font Size sub-menu
MenuItem miSmall = new MenuItem("&Small", new EventHandler(this.FormatSize_Clicked));
MenuItem miMedium = new MenuItem("&Medium", new EventHandler(this.FormatSize_Clicked));
MenuItem miLarge = new MenuItem("&Large", new EventHandler(this.FormatSize_Clicked));

miFormat.MenuItems.Add( "Font &Size"
                      , new EventHandler(this.FormatSize_Clicked)
                      , (new MenuItem[]{ miSmall, miMedium, miLarge }));

VB
'Add Format Menu
Dim miFormat As MenuItem = mainMenu.MenuItems.Add("F&ormat")

'Font Face sub-menu
mmiSansSerif = New MenuItem("&1. " & sansSerifFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))
mmiSerif = New MenuItem("&2. " & serifFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))
mmiMonoSpace = New MenuItem("&3. " & monoSpaceFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))

miFormat.MenuItems.Add("Font &Face" _
                      , (New MenuItem() {mmiSansSerif, mmiSerif, mmiMonoSpace}))

'Font Size sub-menu
mmiSmall = New MenuItem("&Small", AddressOf Me.FormatSize_Clicked)
mmiMedium = New MenuItem("&Medium", AddressOf Me.FormatSize_Clicked)
mmiLarge = New MenuItem("&Large", AddressOf Me.FormatSize_Clicked)

miFormat.MenuItems.Add( "Font &Size" _
                      , New EventHandler(AddressOf Me.FormatSize_Clicked) _
                      , (New MenuItem(){ mmiSmall, mmiMedium, mmiLarge }) _
                      )

 
 
添加默认菜单项
下面的示例演示如何指定默认菜单项。

C# 
//Add Format Menu
mmiSansSerif = new MenuItem("&1. " + sansSerifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiSansSerif.DefaultItem = true ;

VB
'Font Face sub-menu
mmiSansSerif = New MenuItem("&1. " & sansSerifFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))
mmiSansSerif.DefaultItem = True


 
向菜单项添加选中标记
下面的示例演示如何在菜单项的旁边显示选中标记。该代码还演示如何跟踪选中了哪个项。
C#
//Add Format Menu
MenuItem miMedium = new MenuItem("&Medium", new EventHandler(this.FormatSize_Clicked));
miMedium.Checked = true;

....


private void FormatSize_Clicked(object sender, System.EventArgs e) {
    MenuItem miClicked = (MenuItem)sender;

    // Uncheck old selection
    miMainFormatSizeChecked.Checked = false;

    //Do Menu item action and make a new selection
    ....
    miMainFormatSizeChecked = miSmall;
    ....

    // Check the new selection
    miMainFormatSizeChecked.Checked = true;
}


VB
' Add Format Menu
Dim miMedium As MenuItem = new MenuItem("&Medium", AddressOf Me.FormatSize_Clicked)
miMedium.Checked = True

....


Private Sub FormatSize_Clicked(sender As object, e As System.EventArgs)
    Dim miClicked As MenuItem = CType(sender, MenuItem)

    ' Uncheck old selection
    miMainFormatSizeChecked.Checked = False

    ' Do Menu item action and make a new selection
    ....
    miMainFormatSizeChecked = miSmall
    ....

    ' Check the new selection
    miMainFormatSizeChecked.Checked = True
End Sub

 
克隆菜单
在很多情况下,控件的上下文菜单是主菜单的子集。无法将同样的菜单项添加到多个菜单中,但是可以克隆菜单项或菜单项集合。下面的代码演示如何克隆前面创建的 Format 菜单,并将其添加到 Label 的上下文菜单中。

C#
//Add Format to label context menu
//Note have to add a clone because menus can't belong to 2 parents

label1ContextMenu.MenuItems.Add(miFormat.CloneMenu());

VB
'Add Format to label context menu
'Note have to add a clone because menus can't belong to 2 parents

label1ContextMenu.MenuItems.Add(miFormat.CloneMenu)

 
菜单合并
在 MDI 应用程序中,每个 MDI 子窗体的主菜单都合并到 MDI 父窗体的主菜单中。


菜单示例

Imports System Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing.Text
Imports System.Windows.Forms

Namespace Microsoft.Samples.WinForms.VB.Menus

    Public Class Menus
        Inherits System.Windows.Forms.Form

        Private Class FontSizes
            Public Shared Small As Single = 8F
            Public Shared Medium As Single = 12F
            Public Shared Large As Single = 24F
        End Class

        '字体外观和大小
        Private fontFace As String = "Arial"
        Private fontSize As Single = FontSizes.Medium

        '用来跟踪被选中和未被选中的菜单项
        Private mmiSansSerif As MenuItem
        Private mmiSerif As MenuItem
        Private mmiMonoSpace As MenuItem
        Private mmiSmall As MenuItem
        Private mmiMedium As MenuItem
        Private mmiLarge As MenuItem
        Private cmiSansSerif As MenuItem
        Private cmiSerif As MenuItem
        Private cmiMonoSpace As MenuItem
        Private cmiSmall As MenuItem
        Private cmiMedium As MenuItem
        Private cmiLarge As MenuItem

        Private miMainFormatFontChecked As MenuItem
        Private miMainFormatSizeChecked As MenuItem
        Private miContextFormatFontChecked As MenuItem
        Private miContextFormatSizeChecked As MenuItem

        Private currentFontFamily As FontFamily
        Private monoSpaceFontFamily As FontFamily
        Private sansSerifFontFamily As FontFamily
        Private serifFontFamily As FontFamily

        Public Sub New()

            MyBase.New()

            Menus = Me

            '此调用是 Windows 窗体设计器所必需的。
            InitializeComponent()

            monoSpaceFontFamily = new FontFamily (GenericFontFamilies.Monospace)
            sansSerifFontFamily = new FontFamily (GenericFontFamilies.SansSerif)
            serifFontFamily = new FontFamily (GenericFontFamilies.Serif)
            currentFontFamily = sansSerifFontFamily

            label1.Font = New Font(fontFace, fontSize)

            '添加“文件”菜单
            Dim miFile As MenuItem = MainMenu.MenuItems.Add("文件(&F)")
            miFile.MenuItems.Add(New MenuItem("打开(&O)...", New EventHandler(AddressOf Me.FileOpen_Clicked), Shortcut.CtrlO))
            miFile.MenuItems.Add("-")     ' 提供一个分隔符
            miFile.MenuItems.Add(New MenuItem("退出(&X)", New EventHandler(AddressOf Me.FileExit_Clicked), Shortcut.CtrlX))

            '添加“格式”菜单
            Dim miFormat As MenuItem = MainMenu.MenuItems.Add("格式(&O)")

            '“字体外观”子菜单
            mmiSansSerif = New MenuItem("1.(&1)" & sansSerifFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))
            mmiSansSerif.Checked = True
            mmiSansSerif.DefaultItem = True
            mmiSerif = New MenuItem("2. (&2)" & serifFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))
            mmiMonoSpace = New MenuItem("3.(&3)" & monoSpaceFontFamily.Name, New EventHandler(AddressOf Me.FormatFont_Clicked))

            miFormat.MenuItems.Add("字体外观(&F)" _
                                  , (New MenuItem() {mmiSansSerif, mmiSerif, mmiMonoSpace}))

            '“字体大小”子菜单
            mmiSmall = New MenuItem("小(&S)", New EventHandler(AddressOf Me.FormatSize_Clicked))
            mmiMedium = New MenuItem("中(&M)", New EventHandler(AddressOf Me.FormatSize_Clicked))
            mmiMedium.Checked = True
            mmiMedium.DefaultItem = True
            mmiLarge = New MenuItem("大(&L)", New EventHandler(AddressOf Me.FormatSize_Clicked))

            miFormat.MenuItems.Add("字体大小(&S)" _
                                  , (New MenuItem() {mmiSmall, mmiMedium, mmiLarge}))

            '向标签上下文菜单添加格式
            '注意,因为菜单不能属于两个父级,所以必须添加一个复本
            label1ContextMenu.MenuItems.Add(miFormat.CloneMenu)

            ' 设置上下文菜单项 - 使用它们选中和取消选中项
            cmiSansSerif = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(0)
            cmiSerif = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(1)
            cmiMonoSpace = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(2)
            cmiSmall = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(0)
            cmiMedium = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(1)
            cmiLarge = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(2)

            '用这些来跟踪被选中的菜单项
            '因为有菜单和上下文菜单,所以这会比较复杂
            miMainFormatFontChecked = mmiSansSerif
            miMainFormatSizeChecked = mmiMedium
            miContextFormatFontChecked = cmiSansSerif
            miContextFormatSizeChecked = cmiMedium

        End Sub

        '“文件”->“退出”菜单项处理程序
        Private Sub FileExit_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)
            Me.Close()
        End Sub

        '“文件”->“打开”菜单项处理程序
        Private Sub FileOpen_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)
            MessageBox.Show("为什么这会打开文件?")
        End Sub

        '“格式”->“字体”菜单项处理程序
        Private Sub FormatFont_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)

            Dim miClicked As MenuItem = CType(sender, MenuItem)

            miMainFormatFontChecked.Checked = False
            miContextFormatFontChecked.Checked = False

            If miClicked Is mmiSansSerif Or miClicked Is cmiSansSerif Then
                miMainFormatFontChecked = mmiSansSerif
                miContextFormatFontChecked = cmiSansSerif
                currentFontFamily = sansSerifFontFamily
            ElseIf miClicked Is mmiSerif Or miClicked Is cmiSerif Then
                miMainFormatFontChecked = mmiSerif
                miContextFormatFontChecked = cmiSerif
                currentFontFamily = serifFontFamily
            Else
                miMainFormatFontChecked = mmiMonoSpace
                miContextFormatFontChecked = cmiMonoSpace
                currentFontFamily = monoSpaceFontFamily
            End If

            miMainFormatFontChecked.Checked = True
            miContextFormatFontChecked.Checked = True

            label1.Font = New Font(currentFontFamily, fontSize)

        End Sub

        '“格式”->“大小”菜单项处理程序
        Private Sub FormatSize_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)

            Dim miClicked As MenuItem = CType(sender, MenuItem)

            miMainFormatSizeChecked.Checked = False
            miContextFormatSizeChecked.Checked = False

            Dim fontSizeString As String = miClicked.Text

            If (fontSizeString = "小(&S)") Then
                miMainFormatSizeChecked = mmiSmall
                miContextFormatSizeChecked = cmiSmall
                fontSize = FontSizes.Small
            ElseIf (fontSizeString = "大(&L)") Then
                miMainFormatSizeChecked = mmiLarge
                miContextFormatSizeChecked = cmiLarge
                fontSize = FontSizes.Large
            Else
                miMainFormatSizeChecked = mmiMedium
                miContextFormatSizeChecked = cmiMedium
                fontSize = FontSizes.Medium
            End If

            miMainFormatSizeChecked.Checked = True
            miContextFormatSizeChecked.Checked = True

            label1.Font = New Font(currentFontFamily, fontSize)
        End Sub

        '窗体重写 dispose 以清理组件列表。
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub


#Region " Windows 窗体设计器生成的代码 "

        'Windows 窗体设计器所必需的
        Private components As System.ComponentModel.Container
        Private WithEvents label1 As System.Windows.Forms.Label
        Private WithEvents mainMenu As System.Windows.Forms.MainMenu
        Private label1ContextMenu As System.Windows.Forms.ContextMenu

        Private WithEvents Menus As System.Windows.Forms.Form

        '注意:下面的过程是 Windows 窗体设计器所必需的
        '可以使用 Windows 窗体设计器修改它。
        '不要使用代码编辑器修改它。
        Private Sub InitializeComponent()
            Me.components = New System.ComponentModel.Container()
            Me.mainMenu = New System.Windows.Forms.MainMenu()
            Me.label1 = New System.Windows.Forms.Label()
            Me.label1ContextMenu = New System.Windows.Forms.ContextMenu()
            Me.Text = "Menus 'R Us"
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.Menu = mainMenu
            Me.ClientSize = New System.Drawing.Size(392, 117)

            label1.BackColor = System.Drawing.Color.LightSteelBlue
            label1.Location = New System.Drawing.Point(16, 24)
            label1.TabIndex = 0
            label1.Anchor = CType(13, System.Windows.Forms.AnchorStyles)
            label1.Size = New System.Drawing.Size(360, 50)
            label1.Text = "Right Click on me - I have a context menu!"
            label1.ContextMenu = label1ContextMenu

            Me.Controls.Add(label1)
        End Sub

#End Region

        '运行应用程序
        '应用程序的主入口点
        <STAThread()> Shared Sub Main()
            System.Windows.Forms.Application.Run(New Menus())
        End Sub

    End Class

End Namespace

C#

namespace Microsoft.Samples.WinForms.Cs.Menus {
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Text;
    using System.Windows.Forms;

    public class Menus : System.Windows.Forms.Form {
        /// <summary>
        ///    必需的设计器变量。
        /// </summary>
        private System.ComponentModel.Container components;
        protected internal System.Windows.Forms.Label label1;
        protected internal System.Windows.Forms.MainMenu mainMenu;
        protected internal System.Windows.Forms.ContextMenu label1ContextMenu;

        // 注释此结构以在 WinForms 设计器中查看 menus.cs。
        // 记住不要在设计器中编辑菜单。这样会与
        // 手写菜单代码冲突。记住在完成此操作
        // 后取消注释此结构。
        private struct FontSizes {
            public static float Small = 8f;
            public static float Medium = 12f;
            public static float Large = 24f;
        }

        //字体外观和大小
        private float fontSize = FontSizes.Medium;

        //用来跟踪被选中和未被选中的菜单项
        private MenuItem mmiSansSerif;
        private MenuItem mmiSerif;
        private MenuItem mmiMonoSpace;

        private MenuItem mmiSmall;
        private MenuItem mmiMedium;
        private MenuItem mmiLarge;

        private MenuItem cmiSansSerif;
        private MenuItem cmiSerif;
        private MenuItem cmiMonoSpace;

        private MenuItem cmiSmall;
        private MenuItem cmiMedium;
        private MenuItem cmiLarge;

        private MenuItem miMainFormatFontChecked ;
        private MenuItem miMainFormatSizeChecked ;
        private MenuItem miContextFormatFontChecked ;
        private MenuItem miContextFormatSizeChecked ;

        private FontFamily currentFontFamily ;
        private FontFamily monoSpaceFontFamily;
        private FontFamily sansSerifFontFamily;
        private FontFamily serifFontFamily;

        public Menus() {

            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();

            // 初始化字体 - 使用一般字体以避免在操作
            // 系统的不同版本之间出现问题
            monoSpaceFontFamily = new FontFamily (GenericFontFamilies.Monospace);
            sansSerifFontFamily = new FontFamily (GenericFontFamilies.SansSerif);
            serifFontFamily = new FontFamily (GenericFontFamilies.Serif);
            currentFontFamily = sansSerifFontFamily;

            //添加“文件”菜单
            MenuItem miFile = mainMenu.MenuItems.Add("文件(&F)");
            miFile.MenuItems.Add(new MenuItem("打开(&O)...", new EventHandler(this.FileOpen_Clicked), Shortcut.CtrlO));
            miFile.MenuItems.Add("-");     // 提供一个分隔符
            miFile.MenuItems.Add(new MenuItem("退出(&X)", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));

            //添加“格式”菜单
            MenuItem miFormat = mainMenu.MenuItems.Add("格式(&O)");

            //“字体外观”子菜单
            mmiSansSerif = new MenuItem("1.(&1)" + sansSerifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
            mmiSansSerif.Checked = true ;
            mmiSansSerif.DefaultItem = true ;
            mmiSerif = new MenuItem("2. (&2)" + serifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
            mmiMonoSpace = new MenuItem("3.(&3)" + monoSpaceFontFamily.Name, new EventHandler(this.FormatFont_Clicked));

            miFormat.MenuItems.Add( "字体外观(&F)",
                                    (new MenuItem[]{ mmiSansSerif, mmiSerif, mmiMonoSpace })
                                    );

            //“字体大小”子菜单
            mmiSmall = new MenuItem("小(&S)", new EventHandler(this.FormatSize_Clicked));
            mmiMedium = new MenuItem("中(&M)", new EventHandler(this.FormatSize_Clicked));
            mmiMedium.Checked = true ;
            mmiMedium.DefaultItem = true ;
            mmiLarge = new MenuItem("大(&L)", new EventHandler(this.FormatSize_Clicked));

            miFormat.MenuItems.Add( "字体大小(&S)",
                                    (new MenuItem[]{ mmiSmall, mmiMedium, mmiLarge })
                                    );

            //向标签上下文菜单添加格式
            //注意,因为菜单不能属于两个父级,所以必须添加一个复本
            label1ContextMenu.MenuItems.Add(miFormat.CloneMenu());

            // 设置上下文菜单项 - 使用它们选中和取消选中项
            cmiSansSerif = label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[0];
            cmiSerif = label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[1];
            cmiMonoSpace = label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[2];
            cmiSmall = label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[0];
            cmiMedium = label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[1];
            cmiLarge = label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[2];

            //用这些来跟踪被选中的菜单项
            //因为有菜单和上下文菜单,所以这会比较复杂
            miMainFormatFontChecked = mmiSansSerif;
            miMainFormatSizeChecked = mmiMedium;
            miContextFormatFontChecked = cmiSansSerif;
            miContextFormatSizeChecked = cmiMedium;

        }

        //“文件”->“退出”菜单项处理程序
        private void FileExit_Clicked(object sender, System.EventArgs e) {
            this.Close();
        }

        //“文件”->“打开”菜单项处理程序
        private void FileOpen_Clicked(object sender, System.EventArgs e) {
            MessageBox.Show("为什么这会打开文件?");
        }

        //“格式”->“字体”菜单项处理程序
        private void FormatFont_Clicked(object sender, System.EventArgs e) {
            MenuItem miClicked = (MenuItem)sender;

            miMainFormatFontChecked.Checked = false;
            miContextFormatFontChecked.Checked = false;

            if ( miClicked == mmiSansSerif || miClicked == cmiSansSerif ) {
                miMainFormatFontChecked = mmiSansSerif;
                miContextFormatFontChecked = cmiSansSerif;
                currentFontFamily = sansSerifFontFamily;
            } else if (miClicked == mmiSerif || miClicked == cmiSerif) {
                miMainFormatFontChecked = mmiSerif;
                miContextFormatFontChecked = cmiSerif;
                currentFontFamily = serifFontFamily;
            } else {
                miMainFormatFontChecked = mmiMonoSpace;
                miContextFormatFontChecked = cmiMonoSpace;
                currentFontFamily = monoSpaceFontFamily;
            }

            miMainFormatFontChecked.Checked = true;
            miContextFormatFontChecked.Checked = true;

            label1.Font = new Font(currentFontFamily, fontSize);
        }

        //“格式”->“大小”菜单项处理程序
        private void FormatSize_Clicked(object sender, System.EventArgs e) {

            MenuItem miClicked = (MenuItem)sender;

            miMainFormatSizeChecked.Checked = false;
            miContextFormatSizeChecked.Checked = false;

            string fontSizeString = ((MenuItem)sender).Text;

            if (fontSizeString == "小(&S)") {
                miMainFormatSizeChecked = mmiSmall;
                miContextFormatSizeChecked = cmiSmall;
                fontSize = FontSizes.Small ;
            } else if (fontSizeString == "大(&L)") {
                miMainFormatSizeChecked = mmiLarge;
                miContextFormatSizeChecked = cmiLarge;
                fontSize = FontSizes.Large ;
            } else {
                miMainFormatSizeChecked = mmiMedium;
                miContextFormatSizeChecked = cmiMedium;
                fontSize = FontSizes.Medium ;
            }

            miMainFormatSizeChecked.Checked = true;
            miContextFormatSizeChecked.Checked = true;

            label1.Font = new Font(currentFontFamily, fontSize);
        }

        /// <summary>
        ///    清理正在使用的所有资源。
        /// </summary>
        protected override void Dispose(bool disposing)
        {
           if (disposing) {
                if (components != null) {
                    components.Dispose();
                }
           }
           base.Dispose(disposing);
        }

        /// <summary>
        ///    设计器支持所必需的方法,不要使用
        ///    代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container ();
            this.mainMenu = new System.Windows.Forms.MainMenu ();
            this.label1 = new System.Windows.Forms.Label ();
            this.label1ContextMenu = new System.Windows.Forms.ContextMenu ();
            this.Text = "Menus 'R Us";
            this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);
            this.Menu = this.mainMenu;
            this.ClientSize = new System.Drawing.Size (392, 117);
            label1.BackColor = System.Drawing.Color.LightSteelBlue;
            label1.Location = new System.Drawing.Point (16, 24);
            label1.TabIndex = 0;
            label1.Anchor = (System.Windows.Forms.AnchorStyles) 13;
            label1.Size = new System.Drawing.Size (360, 50);
            label1.Text = "Right Click on me - I have a context menu!";
            label1.ContextMenu = this.label1ContextMenu;
            this.Controls.Add (this.label1);
        }

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        public static void Main(string[] args) {
            Application.Run(new Menus());
        }

    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章