Mega Code Archive

 
Categories / C# / GUI Windows Form
 

Build Menu and context sensitive menu on your own

using System;   using System.Drawing;   using System.Collections;   using System.ComponentModel;   using System.Windows.Forms;   using System.Data;      internal struct TheFontSize   {     public static int Huge = 30;     public static int Normal = 20;     public static int Tiny = 8;   }      public class mainForm : System.Windows.Forms.Form   {     Color currColor = Color.MistyRose;     private int currFontSize = TheFontSize.Normal;     private StatusBarPanel sbPnlPrompt = new StatusBarPanel();     private StatusBarPanel sbPnlTime = new StatusBarPanel();     private MainMenu mainMenu = new MainMenu();          private MenuItem currentCheckedItem;     private MenuItem checkedHuge;     private MenuItem checkedNormal;     private MenuItem checkedTiny;     public mainForm()     {       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);       this.ClientSize = new System.Drawing.Size(292, 273);       this.MenuComplete += new EventHandler(StatusForm_MenuDone);       BuildMenuSystem();       BuildStatBar();     }     static void Main()      {       Application.Run(new mainForm());     }     private void FileExit_Clicked(object sender, EventArgs e)      {       Console.WriteLine("File | Exit Menu item handler");       this.Close();     }     private void FileSave_Clicked(object sender, EventArgs e)      {             Console.WriteLine("File | Save Menu item handler");     }     private void ColorItem_Clicked(object sender, EventArgs e)      {       MenuItem miClicked = (MenuItem)sender;       string color = miClicked.Text.Remove(0,1);              this.BackColor = Color.FromName(color);       currColor = this.BackColor;     }     private void PopUp_Clicked(object sender, EventArgs e)      {       currentCheckedItem.Checked = false;       MenuItem miClicked = (MenuItem)sender;       string item = miClicked.Text;              if(item == "Huge") {         currFontSize = TheFontSize.Huge;         currentCheckedItem = checkedHuge;       }else if(item == "Normal") {         currFontSize = TheFontSize.Normal;         currentCheckedItem = checkedNormal;       }else if(item == "Tiny") {         currFontSize = TheFontSize.Tiny;         currentCheckedItem = checkedTiny;       }       currentCheckedItem.Checked = true;       Invalidate();     }     protected override void OnPaint(PaintEventArgs e)     {       Graphics g = e.Graphics;       g.DrawString("www.rntsoft.com",          new Font("Times New Roman", (float)currFontSize),          new SolidBrush(Color.Black),          this.DisplayRectangle);     }          protected override void OnResize(EventArgs e)     {       base.OnResize(e);       Invalidate();     }     private void HelpAbout_Clicked(object sender, EventArgs e)      {       Console.WriteLine("The amazing final app...", "About...");     }              private void FileMenuItem_Selected(object sender, EventArgs e)      {       MenuItem miClicked = (MenuItem)sender;       string item = miClicked.Text.Remove(0,1);              if(item == "Save..."){         sbPnlPrompt.Text = "Save current settings.";            }else{         sbPnlPrompt.Text = "Terminates this app.";              }      }     private void ColorMenuItem_Selected(object sender, EventArgs e)      {       MenuItem miClicked = (MenuItem)sender;       string item = miClicked.Text.Remove(0,1);       sbPnlPrompt.Text = "Select " + item;                 }     private void HelpAbout_Selected(object sender, EventArgs e)      {       sbPnlPrompt.Text = "Displays app info";     }     private void StatusForm_MenuDone(object sender, EventArgs e)      {       sbPnlPrompt.Text = "Ready";     }     private void timer1_Tick(object sender, EventArgs e)      {       DateTime t = DateTime.Now;       string s = t.ToLongTimeString() ;       sbPnlTime.Text = s ;         }     private void BuildMenuSystem()     {       MenuItem miFile = mainMenu.MenuItems.Add("&File");                  miFile.MenuItems.Add(new MenuItem("&Save...", new EventHandler(this.FileSave_Clicked), Shortcut.CtrlS));            miFile.MenuItems.Add(new MenuItem("E&xit", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));       miFile.MenuItems[0].Select += new EventHandler(FileMenuItem_Selected);       miFile.MenuItems[1].Select += new EventHandler(FileMenuItem_Selected);       MenuItem miColor = mainMenu.MenuItems.Add("&Background Color");       miColor.MenuItems.Add("&DarkGoldenrod", new EventHandler(ColorItem_Clicked));       miColor.MenuItems.Add("&GreenYellow", new EventHandler(ColorItem_Clicked));              for(int i = 0; i < miColor.MenuItems.Count; i++){         miColor.MenuItems[i].Select += new EventHandler(ColorMenuItem_Selected);             }       MenuItem miHelp = mainMenu.MenuItems.Add("Help");         miHelp.MenuItems.Add(new MenuItem("&About", new EventHandler(this.HelpAbout_Clicked), Shortcut.CtrlA));       miHelp.MenuItems[0].Select += new EventHandler(HelpAbout_Selected);       this.Menu = mainMenu;               ContextMenu popUpMenu = new ContextMenu();       popUpMenu.MenuItems.Add("Huge", new EventHandler(PopUp_Clicked));       popUpMenu.MenuItems.Add("Normal", new EventHandler(PopUp_Clicked));       popUpMenu.MenuItems.Add("Tiny", new EventHandler(PopUp_Clicked));       this.ContextMenu = popUpMenu;       checkedHuge = this.ContextMenu.MenuItems[0];       checkedNormal = this.ContextMenu.MenuItems[1];               checkedTiny = this.ContextMenu.MenuItems[2];              if(currFontSize == TheFontSize.Huge)         currentCheckedItem = checkedHuge;       else if(currFontSize == TheFontSize.Normal)         currentCheckedItem = checkedNormal;       else         currentCheckedItem = checkedTiny;       currentCheckedItem.Checked = true;     }     private void BuildStatBar()     {         Timer timer1 = new Timer();       timer1.Interval = 1000;       timer1.Enabled = true;       timer1.Tick += new EventHandler(timer1_Tick);         StatusBar statusBar = new StatusBar();                statusBar.ShowPanels = true;       statusBar.Panels.AddRange((StatusBarPanel[])new StatusBarPanel[] {sbPnlPrompt, sbPnlTime});       sbPnlPrompt.BorderStyle = StatusBarPanelBorderStyle.None;       sbPnlPrompt.AutoSize = StatusBarPanelAutoSize.Spring;       sbPnlPrompt.Width = 62;       sbPnlPrompt.Text = "Ready";       sbPnlTime.Alignment = System.Windows.Forms.HorizontalAlignment.Right;       sbPnlTime.Width = 76;       try       {         Icon i = new Icon("icon1.ico");         sbPnlPrompt.Icon = i;       } catch(Exception e) {         MessageBox.Show(e.Message);       }       this.Controls.Add(statusBar);       }   }