Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Заблокирован

Не получаается отловить событие

23.11.2010, 13:37. Показов 2113. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется Datagridview с набором строк и столбцов. ячейки можно редактировать. Необходимо, чтобы отлавливалось событие, когда я ввожу текст в ячейку. Это необходимо для отслеживания ввода данных. Мне необходимо в ячейку stringrida вводить только числа, а текст отбрасывать!
Использовал KeyPress,CellValueChanged и т.д.

В чём может быть проблемма?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2010, 13:37
Ответы с готовыми решениями:

Отловить событие
Отловить событие, которое происходит при закрытии диспетчером задач моего процесса. Если такое вообще возможно сделать. Есть мысли на этот...

Отловить событие смены TabPage
У меня на форме есть элемент tabControl, и есть несколько tabPage, на каждом tabPage есть AxWindowsMediaPlayer Object, проблема в том, что...

Как отловить событие в monthCalendar на перелистывание
в календаре monthCalendar есть стрелки перелистывания месяцев. Как программно определить, в какую сторону я листаю?

12
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 13:44
так сделал???

C#
1
2
3
4
5
6
7
 private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
0
Заблокирован
23.11.2010, 13:48  [ТС]
Бельфегор делал..ввожу данные в ячейку, событие не происходит.

Заметил, что если поставить свойство datagridview.readonly=true; то событие начинает срабатываться, но смысл? мне же нужно вводить значение
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 13:50
Цитата Сообщение от a.shveitser Посмотреть сообщение
Бельфегор делал..ввожу данные в ячейку, событие не происходит.
то есть ты поставил брейкпоинт на событие и оно не происходит?
0
Заблокирован
23.11.2010, 13:51  [ТС]
Бельфегор - верно!
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 13:52
подожди сейчас у себя попробую
0
Заблокирован
23.11.2010, 14:11  [ТС]
жду...

Добавлено через 15 минут
Бельфегор - у тебя такая же проблема?
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 14:18
да!!!! УДИВИТЕЛЬНО!!!

подожди немножко ищи другие способы

Добавлено через 4 минуты
Нашел решение, подожди сейчас сделаем
0
Заблокирован
23.11.2010, 14:20  [ТС]
Вообщем заколебался. Получилось сделать вот только это! Данное событие возникает, когда я ввёл данные и нажал кнопку enter

C#
1
2
3
4
5
6
7
8
        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            string input = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
             if (!Regex.IsMatch(input, @"[0-9]$"))
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Value = "";               
            }
        }
в этом методе с помощью рег. выражений проверяю, если ячейка содержит текст, то ячейка очищается! Всё вроде ничего, чем ничего) Но возникает вот это...

Пользователь вводит в ячейку текстовые значения, жмахает ентер, возникает моё событие...проверяет что есть текст и очищаеет строку, после этого событие заканчивается, и фокус переходит на новую строку, а это не нужно. Фокус должен остаться в этой ячейки. Но тут парадокс, не могу сделать так, чтобы захватить и оставить фокус в текущей ячейки


делал так к Примеру:

C#
1
2
3
4
5
6
7
8
9
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            string input = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
             if (!Regex.IsMatch(input, @"[0-9]$"))
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Value = "";   
                dataGridView1.CurrentCell = dataGridView1.Rows[5].Cells[0];             
            }
        }
выходит ошибка Необработанное исключение типа "System.StackOverflowException" произошло в System.Windows.Forms.dll

Но если сделать вот это к примеру на кнопке, то всё работает правильно, фокус передаётся.

C#
1
2
3
4
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.CurrentCell = dataGridView1.Rows[5].Cells[0]; 
        }
 Комментарий модератора 
Не забывай про теги кода
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 14:25
оказывается KeyPress на датагриде не ловит сам контрол(ячейку) на которой происходит изменение.
сначала нужно словить контрол(ячейку) и потом для нее обработать KeyPress

C#
1
2
dataGridView.EditingControlShowing += 
new DataGridViewEditingControlShowingEventHandler(dataGridView_EditingControlShowing);
C#
1
2
3
4
5
6
7
8
9
10
11
12
 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress +=
        new KeyPressEventHandler(Control_KeyPress);
        }
        private void Control_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsNumber(e.KeyChar))
            {
                e.Handled = true;
            }
        }
КЛАССНО ЗАРАБОТАЛО
0
Заблокирован
23.11.2010, 14:34  [ТС]
Вопрос решён

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress +=
        new KeyPressEventHandler(Control_KeyPress);
        }
        private void Control_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsNumber(e.KeyChar))
            {
                e.Handled = true;
            }
        }
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
23.11.2010, 14:35
пожалуйста, рад был помочь
1
Заблокирован
23.11.2010, 14:36  [ТС]
Сколько блин я пропарился(((
Большое спасибо Бельфегор, за код и пояснение. Теперь понял!!!!

Уважаю Бельфегор! +1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2010, 14:36
Помогаю со студенческими работами здесь

Отловить событие подключения/отключения USB-носителя
Может кто нибуть четко написать что и где вписать (читал что нада менять код в главном Program.сs, но вроде есть и другие методы, тоже...

Скриншот окон: можно ли отловить это событие
Я делаю : 1. Сканирую процессы. 2. В процессах нахожу хендл нужного окна. 3. С помощью API функций GetWindowDC и BitBlt получаю...

Как отловить событие создания файла в папке
Пользователь, к примеру, пытается создать в папке новый файл, или скопировать туда существующий. В зависимости от определенных условий мне...

Отловить событие
Всем привет! Задаю вопрос, который задают неоднократно, но ответы настолько абстрактные, что ты даже начинаешь сомневаться вообще в...

Как отловить событие обновления? (нажатия кнопки F5)
How to catch event when user press 'Refresh' button(or F5)? Any help ,please Thanks in advance,Sergey.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru