|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
|||||||||||
Привязка дробных данных к textbox12.05.2025, 19:20. Показов 2432. Ответов 28
Метки нет (Все метки)
Всем привет.
сделал привязку и вроде бы все работает, целое число записывается, но никак не могу записать дробное число. особенно если пользователь вводит его через запятую. где вставить проверку на дробь и соответственно заменить запятую на точку, никак не пойму
0
|
|||||||||||
| 12.05.2025, 19:20 | |
|
Ответы с готовыми решениями:
28
Проверка на ввод дробных чисел в textBox Разница между "." и "," в разделении дробных чисел в TextBox Привязка данных к textbox |
| 12.05.2025, 19:46 | ||
|
0
|
||
|
|
||||||||||||||||
| 13.05.2025, 08:56 | ||||||||||||||||
|
sonmax, Судя по коду это WPF. В класс Application в конструктор добавьте вот это
sonmax, Добавлено через 34 секунды Добавлено через 4 минуты sonmax,
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
||
| 13.05.2025, 19:01 [ТС] | ||
|
Спасибо за ответы, удалось только к вечеру добраться до программы.
программа в winforms суть в том, что пользователь может добавлять строки с 20 окнами в ряду. в этих окнах, где-то сам пользователь задает значения, где-то они рассчитываются автоматом из предыдущих полей. сделал отдельные процедуры для считывания/записи данных из окон в массив, но мне показалось это неудобным, решил попробовать через привязку. по сути головняк я сам себе придумал. т.к. в проектах в основном использую winforms, то такой надобности особо и не было. ну теперь, блин, появилась. судя по вашим ответам все это для WPF
тоже не заработали. я как то ни как не могу определить событие где после ввода - значение записывается в массив. чтоб на этом этапе ошибку обработать. keydown - рано, keyup - поздно сейчас склоняюсь к тому, чтобы все данные перевести в string, а потом уже при расчете переводить в дробь. но это как то не криво..
0
|
||
| 13.05.2025, 19:11 | ||
|
Не по теме: Судя по вашему описанию, какой либо модели данных у вас нет, всё храните в простых массивах.
0
|
||
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
|||||||
| 13.05.2025, 20:21 [ТС] | |||||||
|
у меня keyup отвечает за расчет в окнах и переход на другое окно.
но уже тут поздно что либо делать. получается следующее (на видео было бы конечно более наглядно): значение в окне(то что вводится) переменная соответствующая окну 0 0 0, 0 тут происходит как то проверка, т.к. "0," - это не число, то ошибка и в переменную пишется 0 т.е не дает дальше вводить, и уже сбрасывается на старую переменную, в данном случае 0 уф, как то так объяснил. Добавлено через 1 минуту
только с decimal бы разобраться
0
|
|||||||
| 13.05.2025, 23:28 | ||
|
Большинство завсегдатаев форума вам сразу скажут о шаблонах разработки, которые делят приложение на слои. Каждый слой отвечает за свою часть обработки данных. Для больших приложений без такого разделения их поддержка и развитие становятся болью. Однако в частных случаях можно сделать и без всего этого, поэтому опустим эту тему (пока опустим ;-)) Раз уж вы начали использовать привязку данных, то останавливаться глупо, т.к. это шаг вперёд. Поэтому настоятельно рекомендую погрузиться в её изучение. Теперь по теме. Вообще, насколько я смог понять, вам должен подойти IEditableObject интерфейс. Реализовав его в своём классе вы получите возможность отката изменений значения. Но это только часть проблемы. Вообще валидация данных довольно объёмная тема, поэтому коснусь только малой части. Для double значения привязка данных за кулисами использует DoubleConverter, если я не ошибаюсь. А тот, в свою очередь, применяет текущую CultureInfo. И от этой CultureInfo зависит разделитель целой и дробной частей (точка или запятая). Однако это поведение можно поменять прикрутив собственную конвертацию. Достигается это либо предварительной обработкой данных в обработчике события Validating, о чём я уже не раз повторил, либо это делается в объекте привязки путём подключения своего обработчика события Parse (см. пример). Как говориться "выбирай на вкус". Добавлено через 20 минут Перечитав стартовое сообщение вижу, что основная проблема именно в разделителе (точка или запятая). Посмотрите как делается валидация ввода, например тут.
1
|
||
|
|
||||||||||||||||||||
| 14.05.2025, 09:32 | ||||||||||||||||||||
![]() sonmax,
sonmax, Забыл настройку клиента показать ![]()
sonmax, Ну и для double? пример
0
|
||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
|
| 14.05.2025, 14:48 [ТС] | |
|
Спасибо за советы.
Событие конвертации вроде бы отловил, но при выводе это не очень помогло. курсор перескакивает в начало строки. пример. надо ввести 1,5 по шагам: 1 вариант если переменная len из класса DEP - string 1) "1" - все нормально курсор после "1" 2) "," - тоже все нормально курсор после "," 3) "5" - все норм но если на шаге 2 я ввожу ".", то вижу как программа меняет ее на запятую, а курсор перемещается в начало. т.е перед "1" по идее на строковую переменную это не должно действовать? есть подозрение. что проверка на число происходит до Replace(). и вообще почему что-то проверяется при вводе строки. 2 Вариант если переменная len (decimal/double) тут при любом вводе (запятая/точка) перескакивает в начало строки
0
|
|
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
|
| 14.05.2025, 14:55 [ТС] | |
|
видео записал
это первый вариант, len = string первый ввод через запятую, второй - точка
0
|
|
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
||||||
| 14.05.2025, 15:31 [ТС] | ||||||
|
у меня его и нет. но причина наверное в моем классе, а не в привязке
0
|
||||||
| 14.05.2025, 16:09 | ||
|
sonmax, мда!
Ну раз уж смешали логику обработки вводимых данных и собственно сам контрол, то тогда обрабатывайте ввод до конца. А значит управляйте положением курсора после замены точки. sonmax, почему вы настойчиво не хотите делать проверки в обработчике Validating?
0
|
||
|
|
||||||||||||
| 14.05.2025, 16:26 | ||||||||||||
set, вот пример
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 204
|
|||
| 14.05.2025, 18:09 [ТС] | |||
|
мне всегда проще на примерах объяснить... возьмем 10 окон, в первые 3 вводит пользователь, 4 рассчитывается исходя из 3х предыдущих. в 5 -6 опять пользователь в 7 расчет из 1,3, 4 и 6. т.е. просто загнать все в один расчет не получается. и надо, чтобы пользователь последовательно перемещался по окнам.
вообще обработка значения по событиям textbox наверное не подходит. по крайней мере у меня не получилось подобрать подходящее. отлавливать через BindableObject наверное более правильно. в общем сейчас остановился на следующем варианте. стандартный класс textbox + переменная len - в string. жаль красивостей в виде рамки нет. но пока по другому никак.
0
|
|||
|
|
||||||
| 14.05.2025, 19:20 | ||||||
|
Валидация - валидацией, а культура - это культура.
Чтобы применить точку во всех боксах для всего приложения:
Валидаторы и конвертеры, как правило, принимаю текущую культуру, и больше менять запятые на точки не требуется. Добавлено через 1 час 3 минуты Ой, а это же за WPF речь идет? Почему в WinForms разделе..
0
|
||||||
| 14.05.2025, 20:06 | ||
|
Неизбежно возвращаемся к слоям приложения. sonmax, поймите одно нужно стараться отделить данные от их обработки и от их отображения. Какой бы шаблон разработки не применялся всегда следует держать в голове как минимум эти три задачи. Сосредоточимся на двух задачах: отображение и обработка. Отображение это UI, а ваш разукрашенный текстбокс это его элемент. И оба они не должны ничего знать о том какие данные в них вводят. Чтобы этого достичь нагромождают большую кучу вспомогательного кода. Например, для вашего случая, чтобы не добавлять логику форматирования данных (то есть тот код, который отслеживает и меняет запятую на точку) я бы написал класс форматтер, который выполнял эту задачу. Текстбокс должен принимать этот форматтер, передавать ему пользовательский ввод и получать "правильное" представление. Заметьте я ни разу не упомянул, что речь идёт о дробном числе потому, что задача хранения данных лежит на другом слое. Для вашего случая это класс DEP. Вообще замена запятой миллион раз обсуждалась на форуме. sonmax, вы подобные темы искали, читали?
1
|
||
| 14.05.2025, 21:33 | ||||||||||||||||
Сообщение было отмечено sonmax как решение
Решение
sonmax, пробуйте
Базовый класс
Класс данных
Форма
TextBoxAndDouble.mp4
0
|
||||||||||||||||
| 14.05.2025, 21:34 | |
|
del
0
|
|
| 14.05.2025, 21:34 | |
|
Помогаю со студенческими работами здесь
20
Привязка данных dataGridView к textBox'ам на второй форме Двунаправленная привязка данных между textbox.text и элементом класса привязка данных к textBox Привязка combobox и textbox к базе данных Привязка данных из datagridview в textbox и combobox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|