Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
.NET 4.x

Выделение ячейки при наведении на нее указателем

08.02.2019, 09:40. Показов 2709. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Есть приложение с таблицей (datagridview1) и есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            // рисуем границу ячейки при наведении на неё мышью
            if (dataGridView1.RectangleToScreen(e.CellBounds).Contains(MousePosition))
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(35, Color.Blue)), e.CellBounds);
                e.Graphics.DrawRectangle(new Pen(Color.Blue), e.CellBounds);
            }
        }
        private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
        {
            // для перерисовки таблицы с уже нарисованной границей
            dataGridView1.Invalidate();
        }
Подскажите пожалуйста, как сделать тоже самое что на gif'ке, только для одной ячейки столбца (над которой находится в данный момент указатель)?

Вот пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System; 
using System.Drawing; 
using System.Windows.Forms; 
public class MyDataGridView : DataGridView 
{ 
    public MyDataGridView() { DoubleBuffered = true; } 
    protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e) 
    { 
     base.OnRowPostPaint(e); 
     if (this.RectangleToScreen(e.RowBounds).Contains(MousePosition)) 
     { 
      using (var b = new SolidBrush(Color.FromArgb(50, Color.Blue))) 
      using (var p = new Pen(Color.Blue)) 
      { 
       var r = e.RowBounds; r.Width -= 1; r.Height -= 1; 
       e.Graphics.FillRectangle(b, r); 
       e.Graphics.DrawRectangle(p, r); 
      } 
     } 
    } 
    protected override void OnMouseMove(MouseEventArgs e){ 
     base.OnMouseMove(e); this.Invalidate(); 
    } 
    protected override void OnMouseEnter(EventArgs e){ 
     base.OnMouseEnter(e); this.Invalidate(); 
    } 
    protected override void OnMouseLeave(EventArgs e){ 
     base.OnMouseLeave(e); this.Invalidate(); 
    } 
    protected override void OnScroll(ScrollEventArgs e){ 
     base.OnScroll(e); this.Invalidate(); 
    } 
}
P.s.: мой код работает, но получается что это выделение ячейки работает как-бы под самой таблице, а не на ней.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2019, 09:40
Ответы с готовыми решениями:

Выделение строки при наведении на неё мышью
Всем доброго времени суток! Пишу приложение и нужно организовать выделение всей строки в datagridview при наведении на неё мышью. ...

Выделение области Image при наведении на нее мышью
Ребят, посоветуйте... Есть TImage, В него загружен растр.... Я хочу, чтобы при наведении на некоторые области этого растра они...

как из кода убрать выделение кнопки при наведении на нее курсора?
В коде создается кнопка button, соответственно xaml не знает о ней, нужно из кода, при создании,задать этой кнопке свойство не...

5
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
08.02.2019, 10:59
Лучший ответ Сообщение было отмечено АлексПрайм как решение

Решение

АлексПрайм, поместить отрисовку в Paint
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            Rectangle rect = new Rectangle(0, 0, 0, 0);
            dataGridView1.CellPainting += (s, e) =>
            {
                // рисуем границу ячейки при наведении на неё мышью
                if (dataGridView1.RectangleToScreen(e.CellBounds).Contains(MousePosition))
                {
                    rect = e.CellBounds;
                }
            };
            dataGridView1.Paint += (s, e) =>
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(35, Color.Blue)), rect);
                e.Graphics.DrawRectangle(new Pen(Color.Blue), rect);
            };
Добавлено через 1 минуту
АлексПрайм, а чтобы не мерцало особо, перерисовывать только при MouseEnter
C#
1
2
3
4
5
6
7
8
            dataGridView1.CellMouseEnter += (s, e) =>
            {
                dataGridView1.Invalidate();
            };
            dataGridView1.MouseMove += (s, e) =>
            {
                //dataGridView1.Invalidate();
            };
1
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
08.02.2019, 11:15  [ТС]
alexus5
Ругается... Что туда вставить?
Миниатюры
Выделение ячейки при наведении на нее указателем  
0
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
08.02.2019, 11:19
АлексПрайм, вставить нужно в конструктор формы
1
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
08.02.2019, 11:26  [ТС]
alexus5 Заработало!
Ёлый палы, спасибо тебе ДОБРЫЙ ЧЕЛОВЕК! Сам бы не додумался

А может чуток объяснить, что здесь да как?
Почему именно в конструктор формы? Что означает выражение "dataGridView1.CellPainting += (s, e) =>"?
Можете какую-то книжку посоветовать почитать, чтобы дальше не тупить

Заранее благодарю!
0
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
08.02.2019, 11:43
Лучший ответ Сообщение было отмечено АлексПрайм как решение

Решение

Цитата Сообщение от АлексПрайм Посмотреть сообщение
Что означает выражение
это лямбда-выражение
Цитата Сообщение от АлексПрайм Посмотреть сообщение
книжку посоветовать почитать
я брал отсюда инфу
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2019, 11:43
Помогаю со студенческими работами здесь

Как убрать выделение ячейки StringGrid-а при нажатии на нее
Всем привет у меня есть стрингрид в каждой ячейки прорисованы картинки, и когда я нажимаю на картинку у меня выделяется ячейка и это как то...

Изменение ячейки таблицы на текстовое поле с содержанием ячейки при клике на неё
Доброго времени суток! Подскажите, как реализовать? Есть некая таблица, в которой хранятся 7 значений. Как сделать так, чтобы при...

Движение кнопки при наведении на неё
Здравствуйте, помогите пожалуйста, что т я уже упарился с этими кнопками, мне нужно, чтоб при наведении на кнопку она двигалась чуть вверх....

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

Выезжающая панель при наведении на нее мыши
Всем доброго времени суток. Нужно сделать, чтобы панель выезжала из-за экрана при подведении мыши и заезжала при выходе курсора за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru