/*
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 description for MenuTextProviderHost.
///
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;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public MenuTextProviderHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
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();
}
}
}