Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2017, 12:22   #1
Auratos
Пользователь
 
Регистрация: 01.06.2015
Сообщений: 20
По умолчанию DataGridView. Проблема с ограничением ввода символов

Добрый день. У меня есть DataGridView. Т.к. у меня есть один столбец числовой, а другой содержит даты, то я хотел ограничить ввод символом в определенные столбцы. Прочитал многочисленные похожие темы на этом форуме сделал это так:

Код:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
	switch (((DataGridView)sender).CurrentCell.ColumnIndex)
	{
		case 1:
			e.Control.KeyPress -= new KeyPressEventHandler(Control_NumberPress);
			e.Control.KeyPress += new KeyPressEventHandler(Control_NumberPress);
			break;
		case 7:
			e.Control.KeyPress -= new KeyPressEventHandler(Control_DatePress);
			e.Control.KeyPress += new KeyPressEventHandler(Control_DatePress);
			break;
	}
}
Код:
// Функция контроля ввода символов (разрешены цифры и Backspace)
void Control_NumberPress(object sender, KeyPressEventArgs e)
{
	if (e.KeyChar != 8)
		e.Handled = !Char.IsDigit(e.KeyChar);
}
Код:
//Функция контроля ввода символов (разрешены цифры, точка и Backspace)
void Control_DataPress(object sender, KeyPressEventArgs e)
{
	if ((e.KeyChar != 8) && (e.KeyChar != 46))
		e.Handled = !Char.IsDigit(e.KeyChar);
}
Но столкнулся с проблемой, что если даже я не ввожу текст в столбец №7, то функция Control_NumberPress применяется ко всем столбцам, а не только к тому, к которому я хочу. Более того, если я сначала ввожу значение в столбец №1, затем в столбец №7, то срабатывают сразу обе функции в таком порядке:
1. Control_DataPress
2. Control_NumberPress
Что подразумевает собой невозможность ввода точки в ячейку с датой (столбец №7), т.к. последняя функция Control_NumberPress это запрещает. Подскажите, пожалуйста, как справиться с этой проблемой? Или может быть есть другой вариант решения данной задачи.

Последний раз редактировалось Auratos; 10.11.2017 в 13:14.
Auratos вне форума Ответить с цитированием
Старый 10.11.2017, 15:35   #2
Auratos
Пользователь
 
Регистрация: 01.06.2015
Сообщений: 20
По умолчанию

На другом форуме уже подсказали решение. Вот правильный вариант:
Код:
TextBox tb = (TextBox)e.Control;
tb.KeyPress -= Control_DatePress;
tb.KeyPress -= Control_NumberPress;
switch (((DataGridView)sender).CurrentCell.ColumnIndex)
{
	case 1:
		tb.KeyPress += new KeyPressEventHandler(this.Control_NumberPress);
		break;
	case 7:
		tb.KeyPress += new KeyPressEventHandler(this.Control_DatePress);
		break;
}
Просто неправильно делал вычитание
Auratos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В последовательности символов, вводимых с клавиатуры , подсчитать количество пар символов "*". Признак завершения ввода: два симво votsar Помощь студентам 2 09.12.2015 14:27
Ввод символов с ограничением в компоненте TEdit (Delphi) zaira001002 Помощь студентам 3 21.02.2015 15:34
Создать новый компонент ТLabel с ограничением по длине текста ввода mila_f Компоненты Delphi 4 20.02.2012 19:57
Программа для перевода из 4-ичной СС в 5-ичную (с ограничением ввода цифр) -=Andriushka=- Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.10.2011 10:59
Форматирование ввода в колонку dataGridView и проверка правильности ввода tumanovalex C# (си шарп) 1 31.05.2011 19:56