Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/103: Рейтинг темы: голосов - 103, средняя оценка - 4.96
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

Есть ли такое событие DataGridView, которое возникает при изменении ВИДИМОГО содержимого ячейки?

25.01.2013, 02:08. Показов 22175. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из названия ясно, что CellValueChanged не канает; событие должно происходить при каждом нажатии символа и не нужно торопиться отсылать меня к нажатиям клавиш. Кроме нажатий клавиш видимое содержимое ячейки изменяется ещё и мышью (вставить-вырезать-удалить).

То есть тривиальное ЯВНОЕ "проишествие" (изменение видимого содержимого ячейки ячейки) не имеет соответствующего события? Смешно, ей-Богу. Зато существует с десяток дублирующих друг друга событий а-ля "потеря ячейкой фокуса", на фиг бы они упали, с десяток-то.

Неужели дабы отследить такое "происшествие" мне придётся задействовать два события- одно, случающееся при нажатии клавиши и другое, случающееся при клике? Хочу ошибаться! Сам я найти не смог такого события.

В общем, надеюсь на вашу помощь, друзья!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2013, 02:08
Ответы с готовыми решениями:

Какое событие возникает при изменении количества элементов в ListBox
Данные для listBox2 берутся из <BindingList> fiList2 Если я меняю fiList2, то меняется и содержимое listBox2, как мне и нужно. ...

Событие TextBox, возникающее при изменении его содержимого
есть ли какоето свойство дапустим у TextBox которое при вводе в него баквы выполняет определенное действие (мне нужно сделать организацию...

Firebird 2.5 Автоматическое обновление содержимого DataGridView при изменении данных
Всем доброго времени суток подскажите как обновлять автоматически Datagridview при добавлении, изминение и удалении данных? Работаю в...

6
 Аватар для Игрок_со_Смерть
37 / 37 / 6
Регистрация: 06.01.2013
Сообщений: 195
25.01.2013, 03:20
Может быть вот это:
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
//
        // Сводка:
        //     Получает значение, указывающее, имеются ли в текущей ячейке незафиксированные
        //     изменения.
        //
        // Возвращает:
        //     Значение true, если в текущей ячейке имеются незафиксированные изменения;
        //     в противном случае — значение false.
        [Browsable(false)]
        public bool IsCurrentCellDirty { get; }
        //
        // Сводка:
        //     Получает значение, показывающее, выполняется ли изменение ячейки, которая
        //     является активной в данный момент.
        //
        // Возвращает:
        //     Значение true, если выполняется изменение текущей ячейки; в противном случае
        //     — значение false.
        [Browsable(false)]
        public bool IsCurrentCellInEditMode { get; }
        //
        // Сводка:
        //     Получает значение, указывающее, имеются ли в текущей строке незафиксированные
        //     изменения.
        //
        // Возвращает:
        //     Значение true, если в текущей строке имеются незафиксированные изменения;
        //     в противном случае — значение false.
        [Browsable(false)]
        public bool IsCurrentRowDirty { get; }
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
25.01.2013, 04:32
Цитата Сообщение от kravam Посмотреть сообщение
То есть тривиальное ЯВНОЕ "проишествие" (изменение видимого содержимого ячейки ячейки) не имеет соответствующего события?
Конечно. имеет. Только это событие возникает не в DataGridView, а в редакторе, который создается при входе в режим редактирования ячейки. Соответственно, чтобы следить изменение ячейки онлайн, нужно использовать следующее событие: DataGridView.EditingControl.TextChanged. Создавать обработчик рекомендуется так(см. Примечание):
C#
1
2
3
4
5
private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    e.Control.TextChanged -= new EventHandler(Control_TextChanged);
    e.Control.TextChanged += new EventHandler(Control_TextChanged);
}
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.01.2013, 17:23  [ТС]
Игрок_со_Смерть, тут видите в чём дело, вот вроде IsCurrentCellDirty подходит мне как нельзя лучше, и эту функцию надо вызвать кое-где и в зависимости от результата совершать нужные мне действия

Где вызвать?

Ну, наверное в обработчике нужного события- события, случившегося, когда визуально ячейка изменится. То есть мне надо найти такой обработчик и проверять в нём значение, возвращаемое IsCurrentCellDirty;

Стоп. Но если я найду такой обработчик- на фига мне вызывать в нём IsCurrentCellDirty? В том-то всё и дело, что речь идёт о поиске нужного обработчика, а уж что в нём вызвать, это совсем другой вопрос.

++++++++++++++++++++++++++++++++++++++++ ++++++++++++=


kodv, у меня ваш код не компилится, но это ладно. Я пытаюсь в нём разобраться. Итак:

C#
1
e.Control.TextChanged -= new EventHandler(Control_TextChanged);
вот я вижу,что из цепочки обработчиков события e.Control.TextChanged вы пытаетесь удалить один обработчик.

Зачем вы это делаете для меня неводомёк. Откуда удаляете- тоже не очень. Я так понял, e.Control- это и есть одна из ипостасей ячейки, а e.Control.TextChanged событие, которое возникает, если в ячейке изменён текст

Но, наверное, из цепочки обработчиков должно удаляться УЖЕ ИМЕЮЩЕЕСЯ там событие, а не вновь создаваемое, как в вашем примере: new EventHandler

Тут что-то не то, не объясните ли?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
25.01.2013, 18:03
kravam, читайте ссылки, которые вам пишут. на русский, конечно, коряво переведено, но программист должен уметь читать и английский текст, который в MSDN посмотреть нет проблем.
The DataGridView control hosts one editing control at a time, and reuses the editing control whenever the cell type does not change between edits. When attaching event-handlers to the editing control, you must therefore take precautions to avoid attaching the same handler multiple times. To avoid this problem, remove the handler from the event before you attach the handler to the event. This will prevent duplication if the handler is already attached to the event, but will have no effect otherwise. For more information, see the example code in the DataGridViewComboBoxEditingControl class overview.
Надеюсь, прееводить не надо.
Весь код - это создание обработчика события TextChanged редактора, через который осуществляется редактирвоание ячейки, в обработчики событиея EditingControlShowing контрола DataGridView.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.01.2013, 20:17  [ТС]
Да при чём тут переводить- не переводить? Ну переведу я и что? Тот же вопрос и останется- я же не англичанин в конце концов. Скажу: вот я перевёл. И перевод. И вопрос.

...Короче вот я накропал такой код:
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
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.TextChanged += method;
        }
 
        static void method(object source, EventArgs arg)
        {
                MessageBox.Show("вызван метод method, тут надо производить какие-нибудь действия");
        }
    }
}
ну и вопросы, как водятся:
1) куда пихать код
C#
1
e.Control.TextChanged -= method;
?
Можно, конечно, найти событие, которое возникает, когда ячеку покидает фокус.
А отсюда второй вопрос:
2) А почему не писать такой код:
C#
1
e.Control.TextChanged += method;
в обработчике, например события, возникающего когда ячейка принимает фокус?

Добавлено через 10 минут
Цитата Сообщение от kodv Посмотреть сообщение
To avoid this problem, remove the handler from the event before you attach the handler to the event. This will prevent duplication if the handler is already attached to the event, but will have no effect otherwise.
это, получается, так писать что ли надо?
C#
1
2
3
4
5
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.TextChanged -= method;
            e.Control.TextChanged += method;
        }

всё равно переспрашивать, как ни крути.
НУ и второй вопрос остаётся в силе.

Добавлено через 1 час 5 минут
А, я понял, нам необходимо получить объект "DataGridViewEditingControlShowingEventA rgs e" с тем, чтобы потом написать
C#
1
2
             e.Control.TextChanged -= method;
            e.Control.TextChanged += method;
а это мы можем сделать только в dataGridView1_EditingControlShowing
0
 Аватар для ForestG
39 / 39 / 9
Регистрация: 21.11.2009
Сообщений: 201
29.10.2015, 21:48
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            TextBox tbViewEdit = e.Control as TextBox;
            if (tbViewEdit != null)
            {
                tbViewEdit.TextChanged += new EventHandler(tbViewEdit_TextChanged);
                // tbViewEdit.KeyDown += new KeyEventHandler(tbViewEdit_KeyDown);
            }
 
private void tbViewEdit_TextChanged(object sender, EventArgs e)
        {
 TextBox dgCellEdit = (TextBox)sender;
 //string text_ = dgCellEdit.Text;
//Далее работайте как с текстовым полем
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2015, 21:48
Помогаю со студенческими работами здесь

Изменение базы при изменении ячейки DataGridView
Подскажите ,пожалуйста, как, при внесении изменений в ячейку DataGridView отобразить эти изменения в таблице базы, которая выбрана в...

Событие для dataGridView при изменении, удалении и добавлении строк
какое событие нужно использовать для элемента dataGridView, которое активировалось при изменении ячейки, добавлении и удалении строк?

Получение содержимого ячейки DataGridView при клике на ней
При нажатии на ячейку в DataGridView в другом PictureBox выводила кортику об этой ячейки

Событие при завершении редактирования ячейки DataGridView
Мне удалось организовать перебор, нет ли в datagridview повторяющихся значений всего один столбец и 50 строк, но вот проблема, эсли...

Окно сообщения об ошибке DataGridView по умолчанию, при изменении типа ячейки в комбо бокс
сделал все как тут написано:"Чтобы изменить тип столбца с использованием конструктора, выполните следующие действия: Щелкните глиф...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru