ContextMenuStrip представляет контекстное меню. Данный компонент во многом аналогичен элементы MenuStrip за тем исключением, что контекстное меню не может использоваться само по себе, оно обязательно применяется к какому-нибудь другому элементу, например, текстовому полю.
Новые элементы в контекстное меню можно добавить в режиме дизайнера:
При этом мы можем добавить все те же элементы, что и в MenuStrip. Но, как правило, использует ToolStripMenuItem, либо элемент ToolStripSeparator, представляющий горизонтальную полоску разделитель между другими пунктами меню.
Либо на панели свойств можно обратиться к свойству Items компонента ContextMenuStrip и в открывшемся окне добавить и настроить все элементы меню:
Теперь создадим небольшую программу. Добавим на форму элементы ContextMenuStrip и TextBox, которые будут иметь названия contextMenuStrip1 и textBox1 соответственно. Затем изменим код формы следующим образом:
public partial class Form1 : Form { string buffer; public Form1() { InitializeComponent(); textBox1.Multiline = true; textBox1.Dock = DockStyle.Fill; // создаем элементы меню ToolStripMenuItem copyMenuItem = new ToolStripMenuItem("Копировать"); ToolStripMenuItem pasteMenuItem = new ToolStripMenuItem("Вставить"); // добавляем элементы в меню contextMenuStrip1.Items.AddRange(new[] { copyMenuItem, pasteMenuItem }); // ассоциируем контекстное меню с текстовым полем textBox1.ContextMenuStrip = contextMenuStrip1; // устанавливаем обработчики событий для меню copyMenuItem.Click += copyMenuItem_Click; pasteMenuItem.Click += pasteMenuItem_Click; } // вставка текста void pasteMenuItem_Click(object sender, EventArgs e) { textBox1.Paste(buffer); } // копирование текста void copyMenuItem_Click(object sender, EventArgs e) { // если выделен текст в текстовом поле, то копируем его в буфер buffer = textBox1.SelectedText; } }
В данном случае выполнена простейшая реализация функциональности copy-paste. В меню добавляется два элемента. А у текстового поля устанавливается многострочность, и оно растягивается по ширине контейнера.
У многих компонентов есть свойство ContextMenuStrip
, которое позволяет ассоциировать контекстное меню с данным элементом.
В случае с TextBox ассоциация происходит следующим образом: textBox1.ContextMenuStrip = contextMenuStrip1
.
И по нажатию на текстовое поле правой кнопкой мыши мы сможем вызвать ассоциированное контекстное меню.
С помощью обработчиков нажатия пунктов меню устанавливаются действия по копированию и вставке строк.