Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
1 / 1 / 0
Регистрация: 07.01.2013
Сообщений: 27

MaskedTextBox - проверка вводных данных для времени

12.02.2016, 12:38. Показов 6890. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал на форме MaskedTextBox1 с маской времени (mask - Time): 00:00. Есть ли готовые решения подключить фильтр (??) на вводимые данные, так как в поля можно загнать 99:99 часов/минут и все это проглатывается в string. Или же вручную прописывать фильтр час = 0...23 + мин = 0...59, при этом проверить длину введенного string = 4;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2016, 12:38
Ответы с готовыми решениями:

Проверка введения данных в MaskedTextBox
Как проверить были ли введены какие то данные в MaskedTextBox, чтобы потом можно было записать в БД. Использую такой алгоритм. с TextBox...

MaskedTextBox - проверка на пустоту
Как записать условие на содержимое MaskedBox.То есть, если туда ничего не введено вылетал MessageBox. if (maskedPAN.Text == "" ...

Определение разницы между значениями времени, введенными в MaskedTextBox'ы
Есть maskedTextBox1 и maskedTextBox2. В них указывается время в формате __:__ и __:__ соответственно. Как сделать чтобы при вводе в них...

7
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.02.2016, 14:19
EgorDS,
можно проверить валидность так:
C#
1
2
3
4
5
6
7
8
9
private void maskedTextBox1_Validating(object sender, CancelEventArgs e)
{
    DateTime time;
    if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time))
    {
        MessageBox.Show("Ашипка!");
        e.Cancel = true;
    }
}
1
1 / 1 / 0
Регистрация: 07.01.2013
Сообщений: 27
12.02.2016, 16:56  [ТС]
Вот код обработчика, для отладки ввел лишние промежуточные переменные. При нажатии Enter, глобальные int32 h1 и m1 получают значения Час и минута. Строка " panel6.Focus() " переводит фокус (пока без разницы куда) что бы снять курсор с maskedTextBox1.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                e.Handled = true;
                label201.Text = maskedTextBox1.Text;
                panel6.Focus();
                string s0 = label201.Text;
                string s1 = s0.Substring(0, 2);
                string s2 = s0.Substring(3, 2);
                label202.Text = s1;
                label203.Text = s2;
                h1 = Convert.ToInt32(s1);
                m1 = Convert.ToInt32(s2);
 
            }
 
        }
Теперь пытаюсь понять ваш код.
DateTime - структура , к примеру

DateTime(Int32, Int32, Int32, Int32, Int32, Int32) - Инициализирует новый экземпляр структуры DateTime заданным годом, месяцем, днем, часом, минутой и секундой.

if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time)) - все очень просто но не фига не понял. С языком С# (программированием) только начал знакомится.

Вообще изначальная задача - по временным точкам (час : мин) изменять условия значения x. Временные точки проходят через полночь. Но абсолютное значение год/ месяц/ день/ минута вводить не желательно так как программа запускается заново каждый рабочий день вечером.

к стати быть может сделать так :?
1. создаем DateTime(Int32, Int32, Int32, Int32, Int32, Int32).
значение Hour присваиваем первые два значения maskedTextBox1 - ловим исключение1
значение minute присваиваем последние два значения maskedTextBox1 - ловим исключение2

по исключениям определяем игнорить ввод данных и очистить maskedTextBox1 либо выполнять дальше программу....
- или за такой алгоритм мне выколют глаза... ?

Добавлено через 9 минут
Часть кода подглядел отсюда: Избавление от звукового сигнала при нажатии на клавишу Enter
C#
1
2
3
4
5
6
7
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   if(e.KeyChar == (char)Keys.Enter)
      e.Handled = true;
   else
      base.OnKeyPressed(e);
}
строчку base.OnKeyPressed(e); - убрал, так как компилятор на нее ругается и что она делает не фига не понял...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.02.2016, 17:01
Цитата Сообщение от EgorDS Посмотреть сообщение
к стати быть может сделать так :?
1. создаем DateTime(Int32, Int32, Int32, Int32, Int32, Int32).
значение Hour присваиваем первые два значения maskedTextBox1 - ловим исключение1
значение minute присваиваем последние два значения maskedTextBox1 - ловим исключение2
Так у меня примерно так и происходит. Только без исключений.
В строке:
C#
1
if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time))
проверяется возможность преобразовать текст в значение времени. Если можно, то time, вернее его составляющая времени, получает это значение. Составляющая даты получает сегодняшнюю дату.
Если невозможно, то курсор просто не выйдет из MaskedTextBox. Плюс сообщение об ошибке.
Можно при этом установить значение времени по умолчанию:
C#
1
2
3
4
5
6
7
8
9
10
private void maskedTextBox1_Validating(object sender, CancelEventArgs e)
{
    DateTime time;
    if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time))
    {
        MessageBox.Show("Ашипка!");
        e.Cancel = true;
        maskedTextBox1.Text = "00:00";
    }
}
0
1 / 1 / 0
Регистрация: 07.01.2013
Сообщений: 27
13.02.2016, 19:55  [ТС]
За код спасибо. Поставил - все работает. Кроме строки
7. e.Cancel = true;
Уже не в первый раз попадается и не могу понять для чего. Пришлось убрать так как компилятор ругался на нее.

if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time)) - не хватает опыта что бы полностью разобраться. Даже Погуглив в инете. MaskedTextBox - это уже не имя - а тип ?

Собственно вот что имеем: На форме несколько maskedTextBox1(2.3...). Ввод данных прописал через Enter. Заметил что в работе мышкой можно сменить фокус с одного maskedTextBox1 на другой, для корректности сделал событие на потерю фокуса Validated с записью в maskedTextBox1(2.3...) истинного значения. Хотелось бы доработать и сделать так что бы в maskedTextBox1(2.3...) мог принять значение (с проверкой) при смене фокуса. Только вот указанный код проверки уже не работает, так как фокус с maskedTextBox1(2.3...) снят.

if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time))
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
13.02.2016, 20:15
Ничего не понял из
Цитата Сообщение от EgorDS Посмотреть сообщение
аметил что в работе мышкой можно сменить фокус с одного maskedTextBox1 на другой, для корректности сделал событие на потерю фокуса Validated с записью в maskedTextBox1(2.3...) истинного значения. Хотелось бы доработать и сделать так что бы в maskedTextBox1(2.3...) мог принять значение (с проверкой) при смене фокуса. Только вот указанный код проверки уже не работает, так как фокус с maskedTextBox1(2.3...) снят.
Знаю одно. Если на форме будет даже 42 маскедтекстбокса и все они будут подписаны на один обработчик:
C#
1
2
3
4
5
6
7
8
9
10
private void mtb_Validating(object sender, CancelEventArgs e)
{
    DateTime time;
    if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time)) //работаем с MaskedTextBox, вызвавшим обработчик
    {
        MessageBox.Show("Ашипка!");
        e.Cancel = true; //Эта строка не дает снять фокус. Берегите ее! Или уберите, ведь следующая строка пишет в MaskedTextBox время 00:00
        (sender as MaskedTextBox).Text = "00:00"; //работаем с MaskedTextBox, вызвавшим обработчик
    }
}
То при работе мышкой, клавиатурой и даже при управлении силой мысли фокус из MaskedTextBox не уйдет, пока не будет введено значение, которое можно превратить в значение даты.
0
1 / 1 / 0
Регистрация: 07.01.2013
Сообщений: 27
13.02.2016, 20:32  [ТС]
Видимо я не правильно построил алгоритм. так как использовал обработчик нажатия клавиш:
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
private void maskedTextBox5_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                DateTime time;
                if (!DateTime.TryParse((sender as MaskedTextBox).Text, out time))
                {
                    //MessageBox.Show("Ашипка!");
                    // e.Cancel = true;
                    maskedTextBox5.Text = timer_05.Text;
                }
                else
                {
                    h5 = Convert.ToInt32(time.Hour.ToString("00"));
                    m5 = Convert.ToInt32(time.Minute.ToString("00"));
                }
 
                e.Handled = true;
                labeltimer();
                maskedTextBox5.Text = timer_05.Text;
                panel6.Focus();
 
            }
 
        }
После успешной проверки принудительно перекидывал фокус чтобы убрать курсор...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
13.02.2016, 21:09
EgorDS,
В моем примере обрабатывается не KeyPress, а Validating.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.02.2016, 21:09
Помогаю со студенческими работами здесь

Значение пустого maskedTextBox (в формате времени) при переносе в БД SQL server
Уважаемые форумчане! Столкнулся с проблемой переноса значения пустого FLIGHT_OUT_maskedTextBox,FLIGHT_IN_maskedTextBox (в формате...

Вывод свойств согласно вводных данных
Добрый вечер! Сразу прошу прощения, так как эту среду только начал изучать) Вопрос в чем, есть табличная база со следующими данными: ...

Проверка корректности введенных данных в TextBox в реальном времени
Здравствуйте, подскажите какой нибудь метод или javascript для проверки в реальном времени корректность данных из текстбокса, что бы...

Форма для приема даты и времени, проверка значений и вывод результатов
Доброго дня! Посмотрите простую задачку. 1. Создать форму с 3 выпадающими списками: число, месяц и год. По умолчанию должна...

Получить из базы данных в MaskedTextBox дату рождения
Всем привет! Использую следующий код: private void SelectData() { /* DateTime date = new DateTime(); ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru