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());
        }

    }
}



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