Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DataGridView clicks

263
18 декабря 2006 года
koltaviy
816 / / 16.12.2004
Возникли следующие вопросы..
По тематике их можно объединить именно под этим названием..
1) Как реализовать выделение строки при клике вне ContentRegion, т.е. выделить строку находящуюся на уровне клика (SelecttionMode = FullRowSelect)..
2) Как реализовать выделение при щелчке правой кнопки мыши..
3) Как реализовать появление ContextMenuStrip только, когда 'кликнули' на ContentRegion (ContextMenuStrip привязан к DataGridView)..
713
18 декабря 2006 года
Ap0k
360 / / 13.03.2006
1) Не понял вопроса.
2) MultiSelect = false;
на CellMouseDown ставим
 
Код:
private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
                dataGridView.Rows[e.RowIndex].Selected = true;
        }

3) Есть много способов... вот несколько:
первый почти описал, см. пункт 2, осталось установить св-во ContextMenuStrip. (это геморный способ, т.к. меню будет появляться и при клике вне записи таблицы, и при клике на заголовке (Header).
Второй: есть замечательное событие :) RowContextMenuStripNeeded
 
Код:
private void dataGridPayments_RowContextMenuStripNeeded(object sender, DataGridViewRowContextMenuStripNeededEventArgs e)
        {
            e.ContextMenuStrip = contextMenu1;
        }

Третий: чисто дизайнер :)
RowTemplate -> ContextMenuStrip (тут думаю понятно)
или так..
dataGridView1.RowTemplate.ContextMenuStrip = contextMenu1;
263
18 декабря 2006 года
koltaviy
816 / / 16.12.2004
Спасибо.. С этим все ясно..
Поясню насчет первого(хотя и так вроде все понятно):
В DataGrdiView, чтобы выделить строку(ячейку) и нужно по ней щелкнуть..
Рассмотрим ситуацию - Форма, к примеру, растянута на весь экран, dataGridView.Dock = Fill, а колонка в гриде, к примеру одна;), причем растянута она не на весь грид..
Так вот, как выделить строку если щелкнули не на ячейке поля, а уже вне ее, справа..
713
19 декабря 2006 года
Ap0k
360 / / 13.03.2006
ну если уже приспичило сделать так :)
есть метод DataGridView.HitTest(int x, int y), возвращающий информацию о том по чему ты "топнул" указателем, если передать туда координаты мыши...
Примерный код (пишу на коленке, улови только идею, сам никогда не пробовал):
Код:
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
     int y = e.Y; //в качестве y передаем координату клика
     int x= dataGridView1.Location.X + (int)dataGridView1.Columns[0].Width / 2;  
    //в качестве x координату середины заголовка твоей единственной    колонки
    //чтобы "ткнуть" именно в ячейку
    DataGridView.HitTestInfo hitInfo = dataGridView1.HitTest(x, y);
    //проверка на то, что мы действительно в ячейке
    if (hitInfo.Type == DataGridViewHitTestType.Cell)
    {
         //выделяем :)
         dataGridView1[hitInfo.ColumnIndex, hitInfo.RowIndex].Selected = true;
    }
}


Возможно ещё понадобится преобразование координат...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог