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