Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ContextMenuStrip и DataGridView 
:(
    Опции темы
darkness
Дата 15.5.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Народ, каким образом работая в  DataGridView, при выделении определённой записи выскакивало бы контестное меню  с определённым перечнем возможных действий? 
По ману(С# 2005 для профессионалов)  посмотрел, там подобное реализуется через применение рефлексии...
Можно ли это организовать более простым способом? Если кто сталкивался с подобной задачей киньте зацепку для её реализации ПЛИЗ!!!
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
XavierElf
Дата 15.5.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: 1
Всего: 1



Можно к примеру анализировать выделенное и выставлять для него соответствующие пункты...
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
tol05
Дата 15.5.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



1. создаешь контекстное меню contextMenuStrip и заполняешь его (определенные тобой действия)
2. подписываешься на событие RowEnter. В нем анализируешь строку (она была выделена для работы) и если это - нужная тебе строка, активизируешь меню


Код

//Нужно строка с RowIndex = 20
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
{
    if(e.RowIndex == 20)
    {
        contextMenuStrip.Show();
    }
}


так, кстати, можно делать и для столбцов, для ячеек, для всего, что угодно, лишь бы оно могло сообщить о том, что с ним начали работать smile

Единственное что (когда-то головой об это бился - настроить координаты меню, оно ведь к контролу не привязано и не знает, где ему конкретно прорисовываться) - прийдется помучаться
что-то вроде такого кода я добавлял
Код

private void contextMenuStrip_Paint(object sender, PaintEventArgs e)
    {
      int x = currentNode.Bounds.Left + ActiveForm.Left + 32;
      int y = currentNode.Bounds.Top + ActiveForm.Top + 88;
      contextMenuStrip.Location = new Point(x, y);
    }

короче, и на него события нужно будет отлавливать


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
darkness
Дата 16.5.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



tol05, примерно так себе и представлял всю эту реализацию... Будем пробовать  smile 
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
darkness
Дата 17.5.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



tol05, думаю эта реализация немного попроще будет...

Код

private void dGG_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
  if (e.ColumnIndex != -1 && e.RowIndex != -1 && e.Button == MouseButtons.Right)
            {

                contextMenuStrip1.Show(MousePosition);
                MessageBox.Show(e.ColumnIndex.ToString());
            }
}


ColumnIndex   и RowIndex помогут выйти на конкретный щёлкнутый Cell.... Вообщем ничего сложного оказывается и нет...
И причём здесь рефлексия?
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
tol05
Дата 17.5.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



Я вообще никакой реализации не предлагал  просто хотел подчеркнуть, что при вызове contextMenuStrip1.Show() нужно подумать над MousePosition smile
Если получается через 
Цитата(darkness @  17.5.2007,  21:05 Найти цитируемый пост)
ColumnIndex   и RowIndex

то замечательно

только где определяется MousePosition? Может, если ее расписать, то реализация опять станет сложной? smile

Мне в свое время повезло меньше, не было у меня ни грида, ни ColumnIndex   и RowIndex
Если ты на мой код посмотришь, то это увидишь. Приходилось обходиться тем, что было.smile

Удачи. Спасибо, что интересуешься моим мнением. 



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
darkness
Дата 18.5.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



tol05, тебе спасибо - натолкнул на решение   smile 
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.