|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Всем добрый день. Буду признателен за подсказку вот какого момента, есть форма, хочу забрать с нее словарь всех элементов TextBox с их размерами, что сделано не сложно, делаю так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В данной конструкции есть одна проблема: так как ctrl изначально объявлен как Control, то в IntelliSense не будут отображаться его специфические методы и свойства. Проблем нет, объявляем как TextBox. Код: vbnet 1.
В этом случае сразу получаем доступ к нужному свойству, но и одновременно с этим и Runtime Error в цикле For Each, которая укажет нам, что текущий элемент коллекции не может быть присвоен ctrl, т.к. он другого типа. Тут два варианта: берем, например, цикл For, сразу тестируем тип и после этого считываем нужный параметр или вариант №2 - просто прописываем нужное свойство в цикле For Each без IntelliSense зная, что такое свойство у контрола в случае если он TextBox имеется (как это сделано в первом примере): Код: vbnet 1. 2. 3. 4. 5. 6. 7.
И тот и тот вариант имеет определенный недостаток, в первом варианте используем предполагаемое свойство, то есть не получаем его на этапе "компиляция", а только проверяем элемент в рантайме и если получаем из коллекции нужный тип, то используем его свойство; второй вариант не отличается "изящностью" конструкции и оба эти варианта по сути делают избыточные движения по перебору всей коллекции и выявлению нужных элементов. Понимаю, в части быстродействия это большая условность, т.к. системе нужны милли/микросекунды чтобы перебрать все контролы, но все же из теоретического интереса, есть какая-либо синтаксическая конструкция, которая позволит пробежать цикл For Each не на всей коллекции контролов, а только на тех, что являются TextBox, то есть гипотетически как-то так: Код: vbnet 1. 2. 3. 4.
Все что мне нужно реализовал, размеры нужны чтобы в следующий раз форма открывалась с теми размерами полей (столбцов таблица), которые пользователь сам себе выставил. Хотелось бы написать "покрасивше". Спасибо за комменты ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 22:26 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр Код: vbnet 1. 2. 3. 4.
вот так было бы еще лучше, то есть убираем избыточное сравнение, если можем сразу итерацию сделать только по TextBox Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 22:54 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
1. Можно скрестить вариант1 с вариантом2: Код: vbnet 1. 2. 3. 4. 5. 6.
2. Штатной коллекции TextBoxes мне ни разу не встречалось. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 23:17 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр ... забрать с нее словарь всех элементов TextBox с их размерами... [src vba] Вы хотите перебрать все TextBox(ы)формы и определить их имена и ширину (или другие сиойства) - так или не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 00:08 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
1) Ганов Александр Код: vbnet 1.
Код: vbnet 1. 2. 3.
и используйте asTextBox(ctrl), когда нужно добраться до интерфейса TextBox. Это то же, что заинлайнил Predeclared, но (чистая вкусовщина) выглядит приятней. 2) Чисто для галочки: альтернативой для Код: vbnet 1.
является Код: vbnet 1.
Но Код: vbnet 1.
легко превращается в Код: vbnet 1.
, а с TypeOf такое не прокатит. 3) Чисто для галочки 2: элемент управления, имеющий определённые Width и Height, сдвинутый в другие Left и Top, может получить другие экранные размеры (+/-1 пиксель по обеим осям). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 00:57 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр Все что мне нужно реализовал, размеры нужны чтобы в следующий раз форма открывалась с теми размерами полей (столбцов таблица), которые пользователь сам себе выставил. Хотелось бы написать "покрасивше". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 04:39 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Благодарю всех за ответы! Отличные идеи. Очень зашла идет с отдельной функцией проверки! Плюс действительно можно и имена хранить в какой-нить temp-таблице, об этом я почему-то не подумал. Одна голова хорошо, а несколько Acs-голов намного лучше. Еще раз всем спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 07:08 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
sdku, да все верно, делаю словарь: Код: vbnet 1. 2. 3.
потом отдаю этот словарь в процедуры загрузки и закрытия формы, где для текст-боксов либо сохраняются размеры в сервисной таблице (при закрытии формы), либо восстанавливаются ранее сохраненные (при открытии формы). таким образом, получается что настроенная мышкой ширина столбца табличной формы при ее последующем открытии будет такая как сохранена ранее. Опрос сделал на каждом открытии, т.к. поля могут поменяться и в сеансе, например, воткнул в форму новое поле через конструктор, при открытии сразу же опросятся все поля и если есть новое, то оно запишется в сервисную таблицу для дальнейшего использования. А вот еще зачем сделал словарь: при сохранении процедура сохранения проверяет словарь и имена поле в сервисной таблице и если в таблице есть какие-то поля, которых нет уже на форме, то сервисная таблица подчищается, ну и плюс словарь позволяет не писать одно и то же в процедуре открытия и закрытия, просто обращаюсь к функции и получаю все поля: итого в самое процедуре открытия/закрытия только одна строка ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 07:13 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Панург, отличная мысль. Обдумаю, может действительно так и сделать, тогда вообще не надо каждый раз опрашивать, а просто пользуем поля данного сеанса и все дела ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 07:14 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр ... в следующий раз форма открывалась с теми размерами полей (столбцов таблица), которые пользователь сам себе выставил... (табличными формами пользуюсь крайне редко и не знаю как таковые ведут себя в многопользовательской среде-в однопользовательской по умолчанию все происходит именно так,как Вы хотите) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 10:19 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
sdku, конкретно данная база однопользовательская, по формам также есть сохранение размеров, но для этого в служебной таблице имеется реквизит "user", то есть настройки сохраняются в разрезе каждого пользователя, вроде все работает без каких-либо проблем, у каждого юзера свои размеры, все как положено. Вообще, я не великий специалист по нескольким пользователям, поэтому тут дельное вряд ли что-то могу сказать (по крайней мере на данном этапе понимания access :-) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 12:39 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр, 1.открываем БД и устанавливаем ширину полей 2.закрываем/открываем БД ширина полей как установили 3.перегружаем(выключаем/включаем) комп-ширина полей как установили в п.1 А-2007 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 13:02 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
sdku, Ну, так совсем не интересно... нет ощущения что ты невообразимо крут и вообще кому-то нужен... В многопользовательской БД, если все запускают свой персональный интерфейс, то тоже танцы с бубном не нужны... Не удивлюсь, что это всё делает сам акс, а ТС думает, что это делает он... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 13:57 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
vmag, у нас скорее всего с Вами разные представления о крутости :-). Работа в акс для меня просто определенный тех.навык и ничего больше. База acs2016, при закрытии и повторном открытии все сбрасывается. Если бы сохранялось, я бы не морочился, возможно, что есть какая-то волшебная галочка, которую можно поставить и все будет сохраняться. Речь идет именно о форме вида "табличная", не о самой таблице. Таблица - "да", действительно сохраняет свои размеры, в форме - нет. Если знаете как сделать, чтобы сохранялось без танцев с бубном средства Акса, буду благодарен за подсказку. привожу видео-пруф ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 14:31 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
то же самое, только с сохранением размеров ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 14:47 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр, Не знаю, может это особенности версии 2016 (всё, что не делается - все к худшему...) В ролике вообще нет кода, две формы, одна обычная, в неё вставлена табличная... Всё работает само собой... Попробуйте перед закрытием формы выбрать сохранение... https://drive.google.com/open?id=17R59NdtEfdII8AGoyXYezbO-HLz0LFh_ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 15:03 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
vmag sdku, Ну, так совсем не интересно... нет ощущения что ты невообразимо крут и вообще кому-то нужен... В многопользовательской БД, если все запускают свой персональный интерфейс, то тоже танцы с бубном не нужны... Не удивлюсь, что это всё делает сам акс, а ТС думает, что это делает он... А-2016 не юзал-неужели эта фича выкинута-НЕ ВЕРЮ (К.С Станиславский) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 15:17 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
vmag, это одна форма со включенным видом "Табличная", то есть никаких вставок и т.д. Скорее всего это действительно особенность акс2016, ну.. по крайней мере до того, момента пока не будет установлено обратное Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Это код формы. В Save все данные сохраняются через Код: vbnet 1.
Что-то мне кажется что как-то можно заюзать Код: vbnet 1.
но пока не нашел нормально описания, что данная команда делает. Вставка в процедуру закрытия Код: vbnet 1.
тоже не дает результата (сохраняется только размер формы, но не ее столбцов). В общем, поэксперементирую еще. Фигня конечно полная, но приятно когда форма открылась с теми настройками, как ты оставил, а не с неведомой шириной ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:00 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр это одна форма со включенным видом "Табличная", то есть никаких вставок и т.д. Попробовал отдельно табличную форму t1 из своего видео... - Размеры столбцов сохраняются автоматически при закрытии формы - Размеры формы сохраняются, если перед закрытием ее сохранить Думаю даже в 2016 если перед закрытием форму сохранить, она сохранится без всякого кода... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:52 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
vmag, перед закрытием вызываю Код: vbnet 1.
, верно? сохраняется только размер формы. Странно, но факт. Попробую еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 18:34 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Ганов Александр vmag, перед закрытием вызываю Не нужно ничего вызывать, вы в ворде 2016 документ как сохраняете ? Нажать на дискетку или Файл - сохранить, или как там в 2016 ? Я не знаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 18:48 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Как вариант:автоматический размер-нет выравнивание по центру-нет ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 00:56 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
vmag, А вы знаете, у меня была подобная картина на 2010. Табличная форма, если подчиненная, состояние столбцов не сохранялось. Не помогали дискетки, ни вызов сохранения из заголовка формы ни ctrl+s, ничего. Стабильно состояние сохранялось, если открыть табличную форму одну, не подчиненной. Я из за этого перешел на программное сохранение в таблицу и восстановление состояния при старте. Правда, с тех пор к этому вопросу не возвращался... Использовал класс, кстати, взятый или тут, или на просторах. С минимальными переделками ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 08:38 |
|
Итерация по коллекции элементов
|
|||
---|---|---|---|
#18+
Игортан vmag, А вы знаете, у меня была подобная картина на 2010. ..... Использовал класс , кстати, взятый или тут, или на просторах. С минимальными переделками sdku ....табличными формами пользуюсь крайне редко Многое из того что на ленточной реализуется легко и просто на табличной сложно,а то и не возможно вовсе.Может просто создать ленточную форму(с полосой прокрутки или вместив все поля в один экран-короче подумать интерфейс) и не заморачиваться ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:26 |
|
|
start [/forum/topic.php?fid=45&msg=39950473&tid=1610130]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 162ms |
0 / 0 |