powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ввод данных с задаваемой позци
13 сообщений из 13, страница 1 из 1
Ввод данных с задаваемой позци
    #37541463
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемы коллеги!

Пусть имеется таблица с полями Р1 целого типа и Р2 символьного.
В поле Р1 записаны целые числа.
Пусть на форме указанная таблица отображается в гриде.

Вопрос.
Как сделать так, чтобы при переходе в любую строку колонки грида,
соответствующей полю Р2, прочитывалось значение поля Р1, например К,
а ввод в Р2 становился возможным только с позиции К
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37541717
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В колонке где P2 выводится в TextBox.Valid() пропиши свою проверку.
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37541986
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Dima T !

Спасибо за ответ.

Буду его изучать.
Если не будет получаться, опять попрошу помощи.
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37542109
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAPУважаемы коллеги!

Пусть имеется таблица с полями Р1 целого типа и Р2 символьного.
В поле Р1 записаны целые числа.
Пусть на форме указанная таблица отображается в гриде.

Вопрос.
Как сделать так, чтобы при переходе в любую строку колонки грида,
соответствующей полю Р2, прочитывалось значение поля Р1, например К,
а ввод в Р2 становился возможным только с позиции К

Если я правильно понял, то в поле p1 - цифры, означающие с какой позиции можно вводить строку в p2. Я бы в Gride с этим не заморачивался, а делал в отдельной форме. Пользователю об этом нужно знать или ему по барабану? Если второй вариант, то все значительно проще - добавляйте перед введенной строкой количество пробелов соответствующее значению поля p1. Ограничить в текстовом поле часть символов от редактирования все равно не удастся.
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37542584
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый IgorNG !

Вы совершенно правильно понимаете суть задачи.

Конечно, осуществить описанный Вами подход очень просто.
То есть сделать форму для редактирования записи.
Кроме того, сам Грид объявить - только для чтения.

В то же время, очень хочется именно в самом гриде.

Может придумаете что-нибудь?
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37542641
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAP,

Ну если только в Valid() добавить тоже, что я писал выше. Но дело в том, что результат будет виден только в момент перехода либо в другую колонку, либо на другую строку. Т.е. это событие происходит перед потерей фокуса объекта. В форме это значительно проще.
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37542732
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNGUAP,

Ну если только в Valid() добавить тоже, что я писал выше. Но дело в том, что результат будет виден только в момент перехода либо в другую колонку, либо на другую строку. Т.е. это событие происходит перед потерей фокуса объекта. В форме это значительно проще.
Текстбокс в гриде ничем не отличается от текстбокса на форме, прописывается все одинаково в обоих случаях.
Если надо незамедлительную реакцию на ввод - извращаться в InteractiveChange()
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37543073
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAP,

Задача чисто умозрительно-академическая или есть практическое применение? Если 2-е, озвучьте, уж очень любопытно

В озвученной Вами форме задача решения не имеет - невозможно запретить редактирование _части_ поля. Значение в поле либо редактируется, либо - нет.
Вы можете не запретить, а игнорировать редактирование части, то есть - запоминать первые К символов и потом при выходе из объекта - "возвращать" эту часть... либо делать это сразу во время изменения - interactivechange
Но это может вызвать неудовольствие со стороны пользователя - ему постоянно надо будет сталкиваться с казусами
Почему бы Вам второе поле не разделить в гриде на двое?
добавьте еще столбец
в первом пусть будет число, во втором - нередактируемая часть текста, в третьем - то, что можно менять


Кстати - на месте принимающей стороны первое, что я бы сделал - ввел бы в поле числа что-то типа -12
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37543123
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSn888В озвученной Вами форме задача решения не имеет - невозможно запретить редактирование _части_ поля. Значение в поле либо редактируется, либо - нет.
Вообще-то, можно. При помощи свойства InputMask. Решение не абсолютное, но, тем не менее...

Если задать свойство

Код: plaintext
TextBox.InputMask = "testXXXXXX"

То у вводимого значения всегда будут вводится первыми символами "test", а потом уже все остальное. Причем это самое "test" даже изменить нельзя будет. В смысле, получается именно то, что надо: часть значения невозможно изменить.

Разумеется, шаблон маски ввода не должен содержать спец.символов используемых для собственно маски. Проще всего это реализовать, если вставляемый текст - это русские буквы. Они уж точно не могут совпасть со спец.символами.

Соответственно, для Grid достаточно прописать свойство Column.DynamicInputMask. Нечто вроде такого выражения

Код: plaintext
Grid1.Column2.DynamicInputMask = "PADR(left(MyTable.P2, MyTable.P1),20,[X])"

Число 20 - это размерность поля P2, которое указано как источник данных для Column2

В данном случае проблема в том, что если в первых K символах встретится спец.символ, то получим искажение значения в поле P2. Поэтому, в общем случае, решение достаточно рискованное.

====================================================

Возможно, речь идет о составных выражениях. Тогда подобные задачи решаются через разделение фрагментов по разным полям

F1 - первый фрагмент
F2 - второй фрагмент
F3 - результат объединения первых двух фрагментов. Недоступно для прямого редактирования. Формируется автоматически на основании значений, введенных в первых двух полях
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37544214
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые коллеги!

Видимо, действительно всегда нужно начинать с самого начала.

Дело в том, что мне нужно "посадить" дерево в грид.
Естественно, наименования узлов должны идти "ступенькой"
Я сознательно не пользуюсь TreeView, поскольку долгие размышления привели меня именно к такому подходу.
Более того, глубоко уважаемый коллега ВладимирМ, к мнению которого многие прислушиваются (и я, в частности), обрушивался на TreeView с критикой.

Мне хотелось бы иметь в Гриде полностью развернутое дерево, отсортированное в естественном порядке (как проводник после нажатия "*").
После нажатия кнопки "Создать подузел текущего узла" должна на "своем" месте появиться пустая запись, которая и должна заполняться с позиции равной "поколению".

В нашем форуме я не нашел ответа на мой вопрос.
Верояно, плохо искал.
Но я старался найти - неудобно отвлекать уважаемых коллег.

И вообще, какой должна быть структура таблицы, оптимальная для хранения и обработки дерева (дерево должно быть на экране - с ним работает Пользователь).
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37545639
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЕсли задать свойство

Код: plaintext
TextBox.InputMask = "testXXXXXX"
....

В данном случае проблема в том, что если в первых K символах встретится спец.символ, то получим искажение значения в поле P2. Поэтому, в общем случае, решение достаточно рискованное.



Именно... поэтому данное решение как раз решением и не является... как только какой-то символ _из_значения_ поля совпадает с _любым_из_спец_для_маски_ - начинается проблема
И решение не "рискованное", а "гарантировано рано или поздно вызовет проблемы"
;)
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37545648
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAP,
Что Вы хотите получить в итоге - теперь понятно
Не совсем ясно - зачем с таким ограничением ?

авторМне хотелось бы иметь в Гриде полностью развернутое дерево, отсортированное в естественном порядке (как проводник после нажатия "*").
После нажатия кнопки "Создать подузел текущего узла" должна на "своем" месте появиться пустая запись, которая и должна заполняться с позиции равной "поколению".

Где это в том самом проводнике Вы видели, чтоб при открытии * папки/подпапки у Вас название папки включало бы в себя весь предыдущий путь ?

Вы хотите, чтоб к примеру, по щелчку на узле "Банка" были подузлы "Банка полная", "Банка пустая"; просто иерархия "Банка"-"Полная"-"Пивом" Вас по какой-то причине не устраивает?
Тогда озаботьтесь еще и прослеживанием ситуации лавинного переименования подчиненных узлов при переименовании "Банка" на "Бутылка"... либо откажитесь от идеи "весь предыдущий путь должен иметь место в названии"
...
Рейтинг: 0 / 0
Ввод данных с задаваемой позци
    #37545654
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ вообще, какой должна быть структура таблицы, оптимальная для хранения и обработки дерева (дерево должно быть на экране - с ним работает Пользователь).

Минимальный набор полей:
1. Код - он же для отслеживания принадлежности по иерархии (например, по позиционному принципу ->
"0001" - "Банка",
" 0001 1" - "Полная",
" 0001 11" - "Пивом"
2. Собственно - наименование которое видит юзер
3. Флаг "Ветка распахнута/свернута"
можно еще добавить флаг "Имеются подчиненные" (дабы не выводить крестик распашки там, где распахивать нечего)

для начала - вполне хватит
Сортируете таблицу по коду, делаете выборку по "Раз ветка не распахнута - то все что внутри нее - на данный момент не видно" - и вперед :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ввод данных с задаваемой позци
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]