using System;
using System.Drawing;
using System.Windows.Forms;
class StandardMenu: Form
{
MenuItem miFileOpen, miFileSave;
MenuItem miEditCut, miEditCopy, miEditPaste;
bool bDocumentPresent = true;
bool bNonNullSelection = true;
bool bStuffInClipboard = false;
public static void Main()
{
Application.Run(new StandardMenu());
}
public StandardMenu()
{
Menu = new MainMenu();
MenuItem mi = new MenuItem("&File");
mi.Popup += new EventHandler(MenuFileOnPopup);
Menu.MenuItems.Add(mi);
int index = Menu.MenuItems.Count - 1;
miFileOpen = new MenuItem("&Open...");
miFileOpen.Click += new EventHandler(MenuFileOpenOnClick);
miFileOpen.Shortcut = Shortcut.CtrlO;
Menu.MenuItems[index].MenuItems.Add(miFileOpen);
miFileSave = new MenuItem("&Save");
miFileSave.Click += new EventHandler(MenuFileSaveOnClick);
miFileSave.Shortcut = Shortcut.CtrlS;
Menu.MenuItems[index].MenuItems.Add(miFileSave);
mi = new MenuItem("-");
Menu.MenuItems[index].MenuItems.Add(mi);
mi = new MenuItem("E&xit");
mi.Click += new EventHandler(MenuFileExitOnClick);
Menu.MenuItems[index].MenuItems.Add(mi);
mi = new MenuItem("&Edit");
mi.Popup += new EventHandler(MenuEditOnPopup);
Menu.MenuItems.Add(mi);
index = Menu.MenuItems.Count - 1;
miEditCut = new MenuItem("Cu&t");
miEditCut.Click += new EventHandler(MenuEditCutOnClick);
miEditCut.Shortcut = Shortcut.CtrlX;
Menu.MenuItems[index].MenuItems.Add(miEditCut);
miEditCopy = new MenuItem("&Copy");
miEditCopy.Click += new EventHandler(MenuEditCopyOnClick);
miEditCopy.Shortcut = Shortcut.CtrlC;
Menu.MenuItems[index].MenuItems.Add(miEditCopy);
miEditPaste = new MenuItem("&Paste");
miEditPaste.Click += new EventHandler(MenuEditCopyOnClick);
miEditPaste.Shortcut = Shortcut.CtrlV;
Menu.MenuItems[index].MenuItems.Add(miEditPaste);
mi = new MenuItem("&Help");
Menu.MenuItems.Add(mi);
index = Menu.MenuItems.Count - 1;
mi = new MenuItem("&About StandardMenu...");
mi.Click += new EventHandler(MenuHelpAboutOnClick);
Menu.MenuItems[index].MenuItems.Add(mi);
}
void MenuFileOnPopup(object obj, EventArgs ea)
{
miFileSave.Enabled = bDocumentPresent;
}
void MenuEditOnPopup(object obj, EventArgs ea)
{
miEditCut.Enabled = bNonNullSelection;
miEditCopy.Enabled = bNonNullSelection;
miEditPaste.Enabled = bStuffInClipboard;
}
void MenuFileOpenOnClick(object obj, EventArgs ea)
{
MessageBox.Show("File Open dialog box!", Text);
}
void MenuFileSaveOnClick(object obj, EventArgs ea)
{
MessageBox.Show("File Save dialog box!", Text);
}
void MenuFileExitOnClick(object obj, EventArgs ea)
{
Close();
}
void MenuEditCutOnClick(object obj, EventArgs ea)
{
}
void MenuEditCopyOnClick(object obj, EventArgs ea)
{
}
void MenuEditPasteOnClick(object obj, EventArgs ea)
{
}
void MenuHelpAboutOnClick(object obj, EventArgs ea)
{
MessageBox.Show("StandardMenu ?", Text);
}
}
GUI Windows Form
Creating a menu on the fly.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.MainMenu File = new System.Windows.Forms.MainMenu();
private System.Windows.Forms.MenuItem menuItem1 = new System.Windows.Forms.MenuItem();
private System.Windows.Forms.MenuItem menuItem2 = new System.Windows.Forms.MenuItem();
private System.Windows.Forms.MenuItem menuItem3 = new System.Windows.Forms.MenuItem();
private System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();
private System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
private System.ComponentModel.Container components = null;
private int nIndex = 0;
public Form1() {
this.SuspendLayout();
this.File.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItem1});
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem2, this.menuItem3});
this.menuItem1.Text = "File";
this.menuItem2.Index = 0;
this.menuItem2.Text = "&Close";
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
this.menuItem3.Index = 1;
this.menuItem3.Text = "E&xit";
this.button1.Location = new System.Drawing.Point(40, 208);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "&Add";
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Location = new System.Drawing.Point(176, 208);
this.button2.Name = "button2";
this.button2.TabIndex = 1;
this.button2.Text = "&Close";
this.button2.Click += new System.EventHandler(this.button2_Click);
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button2, this.button1});
this.Menu = this.File;
this.ResumeLayout(false);
}
[STAThread]
static void Main() {
Application.Run(new Form1());
}
private void button2_Click(object sender, System.EventArgs e) {
Close();
}
private void menuItemHandler(object sender, System.EventArgs e) {
MessageBox.Show(this, "Menu Handler Called");
MenuItem mi = (MenuItem)sender;
MessageBox.Show(this, "Menu Item: " + mi.Text);
}
private void button1_Click(object sender, System.EventArgs e) {
MenuItem mi = new MenuItem("File " + (nIndex + 1), new EventHandler(menuItemHandler));
this.menuItem1.MenuItems.Add(mi);
nIndex++;
}
private void menuItem2_Click(object sender, System.EventArgs e) {
Close();
}
}
new MenuItem
using System; using System.Drawing; using System.Windows.Forms;
Dynamic Menu
/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System.Data.SqlClient;
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace DynamicMenu
{
/// <summary>
/// Summary description for DynamicMenu.
/// </summary>
public class DynamicMenu : System.Windows.Forms.Form
{
internal System.Windows.Forms.MainMenu mnuMain;
internal System.Windows.Forms.MenuItem mnuFile;
internal System.Windows.Forms.MenuItem mnuNew;
internal System.Windows.Forms.MenuItem mnuOpen;
internal System.Windows.Forms.MenuItem mnuClose;
internal System.Windows.Forms.MenuItem mnuSave;
internal System.Windows.Forms.MenuItem MenuItem12;
internal System.Windows.Forms.MenuItem mnuExit;
internal System.Windows.Forms.MenuItem mnuTools;
internal System.Windows.Forms.MenuItem mnuManageHardware;
internal System.Windows.Forms.MenuItem mnuSetupUserAccounts;
internal System.Windows.Forms.MenuItem mnuChangeDisplay;
internal System.Windows.Forms.MenuItem mnuHelp;
internal System.Windows.Forms.MenuItem mnuContents;
internal System.Windows.Forms.MenuItem MenuItem13;
internal System.Windows.Forms.MenuItem mnuAbout;
internal System.Windows.Forms.Button cmdAdmin;
internal System.Windows.Forms.Button cmdUser;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public DynamicMenu()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mnuMain = new System.Windows.Forms.MainMenu();
this.mnuFile = new System.Windows.Forms.MenuItem();
this.mnuNew = new System.Windows.Forms.MenuItem();
this.mnuOpen = new System.Windows.Forms.MenuItem();
this.mnuClose = new System.Windows.Forms.MenuItem();
this.mnuSave = new System.Windows.Forms.MenuItem();
this.MenuItem12 = new System.Windows.Forms.MenuItem();
this.mnuExit = new System.Windows.Forms.MenuItem();
this.mnuTools = new System.Windows.Forms.MenuItem();
this.mnuManageHardware = new System.Windows.Forms.MenuItem();
this.mnuSetupUserAccounts = new System.Windows.Forms.MenuItem();
this.mnuChangeDisplay = new System.Windows.Forms.MenuItem();
this.mnuHelp = new System.Windows.Forms.MenuItem();
this.mnuContents = new System.Windows.Forms.MenuItem();
this.MenuItem13 = new System.Windows.Forms.MenuItem();
this.mnuAbout = new System.Windows.Forms.MenuItem();
this.cmdAdmin = new System.Windows.Forms.Button();
this.cmdUser = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// mnuMain
//
this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuFile,
this.mnuTools,
this.mnuHelp});
//
// mnuFile
//
this.mnuFile.Index = 0;
this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuNew,
this.mnuOpen,
this.mnuClose,
this.mnuSave,
this.MenuItem12,
this.mnuExit});
this.mnuFile.Text = "File";
//
// mnuNew
//
this.mnuNew.Index = 0;
this.mnuNew.Text = "New";
//
// mnuOpen
//
this.mnuOpen.Index = 1;
this.mnuOpen.Text = "Open";
//
// mnuClose
//
this.mnuClose.Index = 2;
this.mnuClose.Text = "Close";
//
// mnuSave
//
this.mnuSave.Index = 3;
this.mnuSave.Text = "Save";
//
// MenuItem12
//
this.MenuItem12.Index = 4;
this.MenuItem12.Text = "-";
//
// mnuExit
//
this.mnuExit.Index = 5;
this.mnuExit.Text = "Exit";
//
// mnuTools
//
this.mnuTools.Index = 1;
this.mnuTools.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuManageHardware,
this.mnuSetupUserAccounts,
this.mnuChangeDisplay});
this.mnuTools.Text = "Tools";
//
// mnuManageHardware
//
this.mnuManageHardware.Index = 0;
this.mnuManageHardware.Text = "Manage Hardware";
//
// mnuSetupUserAccounts
//
this.mnuSetupUserAccounts.Index = 1;
this.mnuSetupUserAccounts.Text = "Setup User Accounts";
//
// mnuChangeDisplay
//
this.mnuChangeDisplay.Index = 2;
this.mnuChangeDisplay.Text = "Change Display";
//
// mnuHelp
//
this.mnuHelp.Index = 2;
this.mnuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuContents,
this.MenuItem13,
this.mnuAbout});
this.mnuHelp.Text = "Help";
//
// mnuContents
//
this.mnuContents.Index = 0;
this.mnuContents.Text = "Contents";
//
// MenuItem13
//
this.MenuItem13.Index = 1;
this.MenuItem13.Text = "-";
//
// mnuAbout
//
this.mnuAbout.Index = 2;
this.mnuAbout.Text = "About";
//
// cmdAdmin
//
this.cmdAdmin.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.cmdAdmin.Location = new System.Drawing.Point(132, 88);
this.cmdAdmin.Name = "cmdAdmin";
this.cmdAdmin.Size = new System.Drawing.Size(80, 24);
this.cmdAdmin.TabIndex = 3;
this.cmdAdmin.Text = "Admin Level";
this.cmdAdmin.Click += new System.EventHandler(this.cmdAdmin_Click);
//
// cmdUser
//
this.cmdUser.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.cmdUser.Location = new System.Drawing.Point(44, 88);
this.cmdUser.Name = "cmdUser";
this.cmdUser.Size = new System.Drawing.Size(80, 24);
this.cmdUser.TabIndex = 2;
this.cmdUser.Text = "User Level";
this.cmdUser.Click += new System.EventHandler(this.cmdUser_Click);
//
// DynamicMenu
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(256, 129);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.cmdAdmin,
this.cmdUser});
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.Menu = this.mnuMain;
this.Name = "DynamicMenu";
this.Text = "Dynamic Menu";
this.Load += new System.EventHandler(this.DynamicMenu_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new DynamicMenu());
}
private void DynamicMenu_Load(object sender, System.EventArgs e)
{
cmdUser_Click(null,null);
}
private void cmdUser_Click(object sender, System.EventArgs e)
{
DataTable dtPermissions;
// Get permissions for an Admin-level user.
dtPermissions = DBPermissions.GetPermissions(DBPermissions.Level.User);
// Update the menu with these permissions.
SearchMenu(this.Menu, dtPermissions);
}
private void cmdAdmin_Click(object sender, System.EventArgs e)
{
DataTable dtPermissions;
// Get permissions for an Admin-level user.
dtPermissions = DBPermissions.GetPermissions(DBPermissions.Level.Admin);
// Update the menu with these permissions.
SearchMenu(this.Menu, dtPermissions);
}
private void SearchMenu(Menu menu, DataTable dtPermissions)
{
DataRow[] rowMatch;
foreach (MenuItem mnuItem in menu.MenuItems)
{
// See if this menu item has a corresponding row.
rowMatch = dtPermissions.Select("ControlName = '" + mnuItem.Text + "'");
// If it does, configure the menu item state accordingly.
if (rowMatch.GetLength(0) > 0)
{
DBPermissions.State state;
state = (DBPermissions.State)int.Parse(rowMatch[0]["State"].ToString());
switch (state)
{
case DBPermissions.State.Hidden:
mnuItem.Visible = false;
break;
case DBPermissions.State.Disabled:
mnuItem.Enabled = false;
break;
}
}
else
{
mnuItem.Visible = true;
mnuItem.Enabled = true;
}
// Search recursively through any submenus.
if (mnuItem.MenuItems.Count > 0)
{
SearchMenu(mnuItem, dtPermissions);
}
}
}
}
public class DBPermissions
{
public enum State
{
Normal = 0,
Disabled = 1,
Hidden = 2
}
public enum Level
{
Admin,
User
}
private static SqlConnection con = new SqlConnection("Data Source=localhost;"
+ "Integrated Security=SSPI;Initial Catalog=Apress;");
public static DataTable GetPermissions(Level userLevel)
{
con.Open();
// Permissions isn't actually actually a table in our data source.
// Instead, it's a view that combines the important information
// from all three tables using a Join query.
string selectPermissions = "SELECT * FROM Permissions ";
switch (userLevel)
{
case Level.Admin:
selectPermissions += "WHERE LevelName = 'Admin'";
break;
case Level.User:
selectPermissions += "WHERE LevelName = 'User'";
break;
}
SqlCommand cmd = new SqlCommand(selectPermissions, con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "Permissions");
con.Close();
return ds.Tables["Permissions"];
}
}
}
/*
-- Database Dump Wizard Ver 2.2.1 (libmssql version 2.3)
--
-- Host: localhost Database: [Apress]
-- ---------------------------------------------------------
-- Server version Microsoft SQL Server Version 8.0.255
-- Dumping user-defined datatypes in '[Apress]'
-- Table structure for table 'Controls'
CREATE TABLE [Controls] (
[ID] int IDENTITY NOT NULL,
[ControlName] varchar(20) NOT NULL)
GO
CREATE UNIQUE CLUSTERED INDEX PK_Controls ON [Controls] (ID)
GO
-- Dumping data for table 'Controls'
--
-- Enable identity insert
SET IDENTITY_INSERT [Controls] ON
GO
INSERT INTO [Controls] ([ID], [ControlName])
VALUES(1, 'New')
GO
INSERT INTO [Controls] ([ID], [ControlName])
VALUES(2, 'Save')
GO
INSERT INTO [Controls] ([ID], [ControlName])
VALUES(3, 'Manage Hardware')
GO
INSERT INTO [Controls] ([ID], [ControlName])
VALUES(4, 'Setup User Accounts')
GO
-- Disable identity insert
SET IDENTITY_INSERT [Controls] OFF
GO
-- Table structure for table 'Controls_Levels'
CREATE TABLE [Controls_Levels] (
[ID] int IDENTITY NOT NULL,
[Control_ID] int NOT NULL,
[Level_ID] int NOT NULL,
[State] smallint)
GO
CREATE UNIQUE CLUSTERED INDEX PK_Control_Levels ON [Controls_Levels] (ID)
GO
-- Dumping data for table 'Controls_Levels'
--
-- Enable identity insert
SET IDENTITY_INSERT [Controls_Levels] ON
GO
INSERT INTO [Controls_Levels] ([ID], [Control_ID], [Level_ID], [State])
VALUES(1, 1, 2, 1)
GO
INSERT INTO [Controls_Levels] ([ID], [Control_ID], [Level_ID], [State])
VALUES(2, 2, 2, 1)
GO
INSERT INTO [Controls_Levels] ([ID], [Control_ID], [Level_ID], [State])
VALUES(3, 3, 2, 2)
GO
INSERT INTO [Controls_Levels] ([ID], [Control_ID], [Level_ID], [State])
VALUES(4, 4, 2, 2)
GO
-- Disable identity insert
SET IDENTITY_INSERT [Controls_Levels] OFF
GO
-- Table structure for table 'Levels'
CREATE TABLE [Levels] (
[ID] int IDENTITY NOT NULL,
[LevelName] varchar(50))
GO
CREATE UNIQUE CLUSTERED INDEX PK_UserLevels ON [Levels] (ID)
GO
-- Dumping data for table 'Levels'
--
-- Enable identity insert
SET IDENTITY_INSERT [Levels] ON
GO
INSERT INTO [Levels] ([ID], [LevelName])
VALUES(1, 'Admin')
GO
INSERT INTO [Levels] ([ID], [LevelName])
VALUES(2, 'User')
GO
-- Disable identity insert
SET IDENTITY_INSERT [Levels] OFF
GO
CREATE VIEW [Permissions]
AS
SELECT Controls.ControlName, Levels.LevelName, Controls_Levels.State
FROM Controls INNER JOIN
Controls_Levels ON Controls.ID = Controls_Levels.Control_ID INNER JOIN
Levels ON Controls_Levels.Level_ID = Levels.ID
GO
*/
Menu Text Provider Host
/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace ExtenderProviderHost
{
/// <summary>
/// Summary description for MenuTextProviderHost.
/// </summary>
public class MenuTextProviderHost : System.Windows.Forms.Form
{
internal System.Windows.Forms.MainMenu mnuMain;
internal System.Windows.Forms.MenuItem MenuItem1;
internal System.Windows.Forms.MenuItem mnuNew;
internal System.Windows.Forms.MenuItem mnuOpen;
internal System.Windows.Forms.MenuItem mnuSave;
private MenuTextProvider menuTextProvider1;
internal System.Windows.Forms.GroupBox GroupBox1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public MenuTextProviderHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mnuMain = new System.Windows.Forms.MainMenu();
this.MenuItem1 = new System.Windows.Forms.MenuItem();
this.mnuNew = new System.Windows.Forms.MenuItem();
this.mnuOpen = new System.Windows.Forms.MenuItem();
this.mnuSave = new System.Windows.Forms.MenuItem();
this.menuTextProvider1 = new MenuTextProvider();
this.GroupBox1 = new System.Windows.Forms.GroupBox();
this.SuspendLayout();
//
// mnuMain
//
this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.MenuItem1});
//
// MenuItem1
//
this.MenuItem1.Index = 0;
this.MenuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuNew,
this.mnuOpen,
this.mnuSave});
this.MenuItem1.Text = "File";
//
// mnuNew
//
this.mnuNew.Index = 0;
this.mnuNew.Text = "New";
//
// mnuOpen
//
this.mnuOpen.Index = 1;
this.mnuOpen.Text = "Open";
//
// mnuSave
//
this.mnuSave.Index = 2;
this.mnuSave.Text = "Save";
//
// menuTextProvider1
//
this.menuTextProvider1.Location = new System.Drawing.Point(0, 244);
this.menuTextProvider1.Name = "menuTextProvider1";
this.menuTextProvider1.Size = new System.Drawing.Size(292, 22);
this.menuTextProvider1.TabIndex = 0;
this.menuTextProvider1.Text = "menuTextProvider1";
//
// GroupBox1
//
this.GroupBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.GroupBox1.Location = new System.Drawing.Point(0, 240);
this.GroupBox1.Name = "GroupBox1";
this.GroupBox1.Size = new System.Drawing.Size(292, 4);
this.GroupBox1.TabIndex = 2;
this.GroupBox1.TabStop = false;
this.GroupBox1.Text = "GroupBox1";
//
// MenuTextProviderHost
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.GroupBox1,
this.menuTextProvider1});
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.Menu = this.mnuMain;
this.Name = "MenuTextProviderHost";
this.Text = "MenuTextProviderHost";
this.Load += new System.EventHandler(this.MenuTextProviderHost_Load);
this.ResumeLayout(false);
}
#endregion
private void MenuTextProviderHost_Load(object sender, System.EventArgs e)
{
menuTextProvider1.SetHelpText(mnuNew, " Create a new document and abandon the current one.");
}
static void Main()
{
Application.Run(new MenuTextProviderHost());
}
}
[ProvideProperty("HelpText", typeof(string))]
public class MenuTextProvider : StatusBar, IExtenderProvider
{
public bool CanExtend(object extendee)
{
if (extendee.GetType() == typeof(MenuItem))
{
return true;
}
else
{
return false;
}
}
private Hashtable helpText = new Hashtable();
public void SetHelpText(object extendee, string value)
{
// Specifying an empty value removes the extension.
if (value == "")
{
helpText.Remove(extendee);
MenuItem mnu = (MenuItem)extendee;
mnu.Select -= new EventHandler(MenuSelect);
}
else
{
helpText[extendee] = value;
MenuItem mnu = (MenuItem)extendee;
mnu.Select += new EventHandler(MenuSelect);
}
}
public string GetHelpText(object extendee)
{
if (helpText[extendee] != null)
{
return helpText[extendee].ToString();
}
else
{
return string.Empty;
}
}
private void MenuSelect(object sender, System.EventArgs e)
{
this.Text = helpText[sender].ToString();
}
}
}
Add a Main Menu
/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Add a Main Menu.
using System;
using System.Windows.Forms;
public class MenuForm : Form {
MainMenu MyMenu;
public MenuForm() {
Text = "Adding a Main Menu";
// Create a main menu object.
MyMenu = new MainMenu();
// Add top-level menu items to the menu.
MenuItem m1 = new MenuItem("File");
MyMenu.MenuItems.Add(m1);
MenuItem m2 = new MenuItem("Tools");
MyMenu.MenuItems.Add(m2);
// Create File submenu
MenuItem subm1 = new MenuItem("Open");
m1.MenuItems.Add(subm1);
MenuItem subm2 = new MenuItem("Close");
m1.MenuItems.Add(subm2);
MenuItem subm3 = new MenuItem("Exit");
m1.MenuItems.Add(subm3);
// Create Tools submenu
MenuItem subm4 = new MenuItem("Coordinates");
m2.MenuItems.Add(subm4);
MenuItem subm5 = new MenuItem("Change Size");
m2.MenuItems.Add(subm5);
MenuItem subm6 = new MenuItem("Restore");
m2.MenuItems.Add(subm6);
// Add event handlers for the menu items.
subm1.Click += new EventHandler(MMOpenClick);
subm2.Click += new EventHandler(MMCloseClick);
subm3.Click += new EventHandler(MMExitClick);
subm4.Click += new EventHandler(MMCoordClick);
subm5.Click += new EventHandler(MMChangeClick);
subm6.Click += new EventHandler(MMRestoreClick);
// Assign the menu to the form.
Menu = MyMenu;
}
[STAThread]
public static void Main() {
MenuForm skel = new MenuForm();
Application.Run(skel);
}
// Handler for main menu Coordinates selection.
protected void MMCoordClick(object who, EventArgs e) {
// Create a string that contains the cooridinates.
string size =
String.Format("{0}: {1}, {2}
{3}: {4}, {5} ",
"Top, Left", Top, Left,
"Bottom, Right", Bottom, Right);
// Display a message box.
MessageBox.Show(size, "Window Coordinates",
MessageBoxButtons.OK);
}
// Handler for main menu Change selection.
protected void MMChangeClick(object who, EventArgs e) {
Width = Height = 200;
}
// Handler for main menu Restore selection.
protected void MMRestoreClick(object who, EventArgs e) {
Width = Height = 300;
}
// Handler for main menu Open selection.
protected void MMOpenClick(object who, EventArgs e) {
MessageBox.Show("Inactive", "Inactive",
MessageBoxButtons.OK);
}
// Handler for main menu Open selection.
protected void MMCloseClick(object who, EventArgs e) {
MessageBox.Show("Inactive", "Inactive",
MessageBoxButtons.OK);
}
// Handler for main menu Exit selection.
protected void MMExitClick(object who, EventArgs e) {
DialogResult result = MessageBox.Show("Stop Program?",
"Terminate",
MessageBoxButtons.YesNo);
if(result == DialogResult.Yes) Application.Exit();
}
}
Form Menu
/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace FormMenu
{
/// <summary>
/// Summary description for FormMenuDemo.
/// </summary>
public class FormMenuDemo : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem mnuFile;
private System.Windows.Forms.MenuItem mnuFileExit;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public FormMenuDemo()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.mnuFile = new System.Windows.Forms.MenuItem();
this.mnuFileExit = new System.Windows.Forms.MenuItem();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuFile});
//
// mnuFile
//
this.mnuFile.Index = 0;
this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuFileExit});
this.mnuFile.Text = "&File";
//
// mnuFileExit
//
this.mnuFileExit.Index = 0;
this.mnuFileExit.Text = "E&xit";
this.mnuFileExit.Click += new System.EventHandler(this.mnuFileExit_Click);
//
// FormMenuDemo
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Menu = this.mainMenu1;
this.Name = "FormMenuDemo";
this.Text = "FormMenuDemo";
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new FormMenuDemo());
}
private void mnuFileExit_Click(object sender, System.EventArgs e)
{
Application.Exit ();
}
}
}