none
Вопрос про контекстное меню и TabControl RRS feed

  • Вопрос

  • C#.

    Есть TabControl и к нему добавляются TabPages.
    Хочу чтобы при нажатии ПКМ на названии вкладки появлялось контекстное меню у которого обрабатывалось событие Click
    Если добавить контекстное меню в TabСontrol, то я не могу понять как определить на названии какой вкладки сработало событие. Добавление же контекстного меню в TabPages решает мою проблему, но контекстное меню выскакивает внутри вкладки, а не названии. Как мне определитьна названии какой вкладки сработало контекстное меню? или м.б. я вообще не верно действую?

    8 октября 2012 г. 11:55

Ответы

  • Привет.

    Все верно действуете, ниже приведен пример, само контекстное меню просто объявлено и не привязано к TabControl. Для TabControl нужно подписаться на событие MouseUp:

            private void tabControl1_MouseUp(object sender, MouseEventArgs e)
            {
                // проверяем что нажата была правая кнопка
                if (e.Button == MouseButtons.Right)
                {
                    // проходим циклом по всем табам для поиска на котором был клик
                    for (int i = 0; i < tabControl1.TabCount; i++)
                    {
                        // получаем область таба и проверяем входит ли курсор в него или нет
                        Rectangle r = tabControl1.GetTabRect(i);
                        if (r.Contains(e.Location))
                        {
                            // показываем контекстое меню и сохраняем номер таба
                            System.Diagnostics.Debug.WriteLine("TabPressed: " + i);
                            contextMenuStrip1.Tag = i; // сохраняем номер таба
                            contextMenuStrip1.Show((Control)sender, (e.Location));
                        }
                    }
                }
            }


    Для связи [mail]


    • Изменено Abolmasov Dmitry 11 октября 2012 г. 6:59
    • Помечено в качестве ответа anknown123455 15 октября 2012 г. 6:54
    11 октября 2012 г. 6:59

Все ответы

  • Привет.

    Все верно действуете, ниже приведен пример, само контекстное меню просто объявлено и не привязано к TabControl. Для TabControl нужно подписаться на событие MouseUp:

            private void tabControl1_MouseUp(object sender, MouseEventArgs e)
            {
                // проверяем что нажата была правая кнопка
                if (e.Button == MouseButtons.Right)
                {
                    // проходим циклом по всем табам для поиска на котором был клик
                    for (int i = 0; i < tabControl1.TabCount; i++)
                    {
                        // получаем область таба и проверяем входит ли курсор в него или нет
                        Rectangle r = tabControl1.GetTabRect(i);
                        if (r.Contains(e.Location))
                        {
                            // показываем контекстое меню и сохраняем номер таба
                            System.Diagnostics.Debug.WriteLine("TabPressed: " + i);
                            contextMenuStrip1.Tag = i; // сохраняем номер таба
                            contextMenuStrip1.Show((Control)sender, (e.Location));
                        }
                    }
                }
            }


    Для связи [mail]


    • Изменено Abolmasov Dmitry 11 октября 2012 г. 6:59
    • Помечено в качестве ответа anknown123455 15 октября 2012 г. 6:54
    11 октября 2012 г. 6:59
  • Спасибо! Получилось!

    15 октября 2012 г. 6:53