Csharp/CSharp Tutorial/GUI Windows Forms/ContextMenu Popup Menu

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Add ContextMenu to TextBox

using System;
using System.Drawing;
using System.Windows.Forms;
public class TextBoxContextMenuDemo : Form
{
    public TextBoxContextMenuDemo()
    {
        InitializeComponent();
        ContextMenu mnuContext = new ContextMenu();
        foreach (MenuItem mnuItem in mnuFile.MenuItems)
        {
            mnuContext.MenuItems.Add(mnuItem.CloneMenu());
        }
        TextBox1.ContextMenu = mnuContext;
    }
    private void TextBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            TextBox1.ContextMenu.Show(TextBox1, new Point(e.X, e.Y));
        }
    }
    private void mnuOpen_Click(object sender, EventArgs e)
    {
        MessageBox.Show("This is the event handler for Open.","TextBoxContextMenuDemo");
    }
    private void mnuSave_Click(object sender, EventArgs e)
    {
        MessageBox.Show("This is the event handler for Save.","TextBoxContextMenuDemo");
    }
    private void mnuExit_Click(object sender, EventArgs e)
    {
        MessageBox.Show("This is the event handler for Exit.","TextBoxContextMenuDemo");
    }
    [STAThread]
    public static void Main(string[] args)
    {
        Application.Run(new TextBoxContextMenuDemo());
    }
    private System.Windows.Forms.MainMenu MainMenu1;
    private System.Windows.Forms.MenuItem mnuFile;
    private System.Windows.Forms.MenuItem mnuOpen;
    private System.Windows.Forms.MenuItem mnuSave;
    private System.Windows.Forms.MenuItem mnuExit;
    private System.Windows.Forms.MenuItem MenuItem5;
    private System.Windows.Forms.MenuItem MenuItem6;
    private System.Windows.Forms.MenuItem MenuItem7;
    private System.Windows.Forms.MenuItem MenuItem8;
    private System.Windows.Forms.TextBox TextBox1;
    private System.ruponentModel.IContainer components = null;
    private void InitializeComponent()
    {
        this.ruponents = new System.ruponentModel.Container();
        this.MainMenu1 = new System.Windows.Forms.MainMenu(this.ruponents);
        this.mnuFile = new System.Windows.Forms.MenuItem();
        this.mnuOpen = new System.Windows.Forms.MenuItem();
        this.mnuSave = new System.Windows.Forms.MenuItem();
        this.mnuExit = new System.Windows.Forms.MenuItem();
        this.MenuItem5 = new System.Windows.Forms.MenuItem();
        this.MenuItem6 = new System.Windows.Forms.MenuItem();
        this.MenuItem7 = new System.Windows.Forms.MenuItem();
        this.MenuItem8 = new System.Windows.Forms.MenuItem();
        this.TextBox1 = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        // 
        // MainMenu1
        // 
        this.MainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
        this.mnuFile,
        this.MenuItem5});
        // 
        // mnuFile
        // 
        this.mnuFile.Index = 0;
        this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
        this.mnuOpen,
        this.mnuSave,
        this.mnuExit});
        this.mnuFile.Text = "File";
        // 
        // mnuOpen
        // 
        this.mnuOpen.Index = 0;
        this.mnuOpen.Text = "Open";
        this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);
        // 
        // mnuSave
        // 
        this.mnuSave.Index = 1;
        this.mnuSave.Text = "Save";
        this.mnuSave.Click += new System.EventHandler(this.mnuSave_Click);
        // 
        // mnuExit
        // 
        this.mnuExit.Index = 2;
        this.mnuExit.Text = "Exit";
        this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
        // 
        // MenuItem5
        // 
        this.MenuItem5.Index = 1;
        this.MenuItem5.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
        this.MenuItem6,
        this.MenuItem7,
        this.MenuItem8});
        this.MenuItem5.Text = "Edit";
        // 
        // MenuItem6
        // 
        this.MenuItem6.Index = 0;
        this.MenuItem6.Text = "Cut";
        // 
        // MenuItem7
        // 
        this.MenuItem7.Index = 1;
        this.MenuItem7.Text = "Copy";
        // 
        // MenuItem8
        // 
        this.MenuItem8.Index = 2;
        this.MenuItem8.Text = "Paste";
        // 
        // TextBox1
        // 
        this.TextBox1.Location = new System.Drawing.Point(44, 56);
        this.TextBox1.Multiline = true;
        this.TextBox1.Name = "TextBox1";
        this.TextBox1.Size = new System.Drawing.Size(180, 88);
        this.TextBox1.TabIndex = 1;
        this.TextBox1.Text = "Right click here to view the cloned context menu.";
        this.TextBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TextBox1_MouseDown);
        // 
        // TextBoxContextMenuDemo
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Controls.Add(this.TextBox1);
        this.Menu = this.MainMenu1;
        this.ResumeLayout(false);
        this.PerformLayout();
    }
}

Form popup menu

using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
public class FormPopupMenu : System.Windows.Forms.Form
{
  private int currFontSize = 12;
  private ContextMenu popUpMenu;
  private MenuItem currentCheckedItem;
  private MenuItem checkedHuge;
  private MenuItem checkedNormal;
  private MenuItem checkedTiny;
  private System.ruponentModel.Container components;
  public FormPopupMenu()
  {
    InitializeComponent();
    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];
    currentCheckedItem = checkedNormal;
    currentCheckedItem.Checked = true;
    this.Resize += new System.EventHandler(this.FormPopupMenu_Resize);
    this.Paint += new System.Windows.Forms.PaintEventHandler(this.FormPopupMenu_Paint);
  }
  protected override void Dispose( bool disposing )
  {
    if( disposing )
    {
      if (components != null) 
      {
        components.Dispose();
      }
    }
    base.Dispose( disposing );
  }
  private void InitializeComponent()
  {
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 273);
  }

  [STAThread]
  static void Main() 
  {
    Application.Run(new FormPopupMenu());
  }
  private void PopUp_Clicked(object sender, EventArgs e) 
  {
    currentCheckedItem.Checked = false;
    MenuItem miClicked = null; 
    if (sender is MenuItem)
      miClicked = (MenuItem)sender;
    else
      return;
    string item = miClicked.Text;
    if(item == "Huge")
    { 
      currFontSize = 18;
      currentCheckedItem = checkedHuge;
    } 
    if(item == "Normal")
    { 
      currFontSize = 12;
      currentCheckedItem = checkedNormal;
    } 
    if(item == "Tiny")
    { 
      currFontSize = 8;
      currentCheckedItem = checkedTiny;
    } 
    currentCheckedItem.Checked = true;
    Invalidate();
  }
  private void FormPopupMenu_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
  {
    Graphics g = e.Graphics;
    g.DrawString("string", 
      new Font("Times New Roman", (float)currFontSize), 
      new SolidBrush(Color.Black), 
      this.DisplayRectangle);
  }
  private void FormPopupMenu_Resize(object sender, System.EventArgs e)
  {
    Invalidate();
  }
}