progs.biz  
Начало>C#>Windows>Урок 23
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Разработка Web-приложений на Microsoft Visual Basic.NET и Microsoft Visual C#.NET. Учебный курс MCAD/MCSD.
 Разработка Web-приложений на Microsoft Visual Basic.NET и Microsoft Visual C#.NET. Учебный курс MCAD/MCSD.
Заказать на Озоне



Яндекс-цитирования

C# для Windows
Урок 23. Как отобразить одно контекстное для нескольких элементов управления?

Для отображениения одного контекстного меню для различных элементов управления на форме не надо для каждого из них писать свой обработчик для щелчка мыши - достаточно написать один обработчик на все элементы управления. Кроме того (и это достаточно очевидный шаг) надо для каждого элемента управления установить свойство ContextMenu равным имени нашего контекстного меню.

Приведем конкретный пример.

Создайте обычное Windows-приложение. Добавьте на форрму несколько элементов управления. Пусть это для определенности будут label, textbox и кнопка. Кроме того, добавьте на форму элемент управления ContextMenu, к которому добавьте парочку пунктов - Item 1 и Item 2. При желании можно добавить и обработчики для данных пунктов меню.

В обработчик для загрузки формы добавьте следующий код:

        private void Form1_Load(object sender, System.EventArgs e)
        {
            // Для каждого элемента управления
            foreach (Control c in Controls)
            {
                // задаем контекстное меню.
                c.ContextMenu = contextMenu1;
                // Указываем для каждого элемента
                // обработчик для правой кнопки мыши.
                c.MouseDown += 
                    new MouseEventHandler(this.ShowPopupMenu);
            }
        }

Смысл кода достаточно ясен из комментариев - перебираем все элементы управления на форме и для каждого задаем контекстное меню и обработчик для правой кнопки мыши.

Остается добавить сам обработчик для нажатия кнопки мыши. Вот его код:

        private void ShowPopupMenu(object sender,
            System.Windows.Forms.MouseEventArgs e)
        {
            // Если нажата правая кнопка мыши.
            if(e.Button == MouseButtons.Right)
            {
                Control c = (Control)sender;
                // Если контекстное меню у элемента существует,
                if(c.ContextMenu != null)
                {
                    // то показываем его.
                    c.ContextMenu.Show(c, new Point(e.X, e.Y));
                }
            }
        }

Обратите внимание, что обработчик мы назвали ShowPopupMenu - точно также, как имя метода, заданного при загрузке формы:

    ...
    c.MouseDown += new MouseEventHandler(this.ShowPopupMenu);
    ...

Компилируем и запускаем программу. Получаем ожидаемый нами результат:

Контекстное меню
Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев