Здравствуйте. В пользовательской форме, что я сейчас делаю, должна быть возможность проверки заполненности и включения всех обязательных полей и переключателей. Что бы не прописывать макрос для каждого бокса (а их планируется не мало), я решил загнать их в класс модуль, чтоб через него отслеживать в каких боксах проводились изменения. Как загонять однотипные боксы, я знаю. В примере это рабочая версия UserForm1 и связанный с ней Class1. Группировка боксов по типу конечно облегчает работу, но хотелось бы и дальше зайти, а именно загнать все боксы разных типов в одну переменную, что бы в класс модуле прописать лишь один макрос реагирующий на изменение как в примере UserForm2 и Class2. Вот тут и возникла проблема. Если с однотипными боксами указать переменную легко, просто записав As MSForms.[тип бокса], [vba]
Код
Public WithEvents №№_TxBx As MSForms.TextBox Public WithEvents №№_CmBx As MSForms.ComboBox Public WithEvents №№_TgBt As MSForms.ToggleButton
[/vba] то что нужно писать для смешанных типов, я найти в инете не смог.
Помогите сделать UserForm2 работающим как задумано.
Здравствуйте. В пользовательской форме, что я сейчас делаю, должна быть возможность проверки заполненности и включения всех обязательных полей и переключателей. Что бы не прописывать макрос для каждого бокса (а их планируется не мало), я решил загнать их в класс модуль, чтоб через него отслеживать в каких боксах проводились изменения. Как загонять однотипные боксы, я знаю. В примере это рабочая версия UserForm1 и связанный с ней Class1. Группировка боксов по типу конечно облегчает работу, но хотелось бы и дальше зайти, а именно загнать все боксы разных типов в одну переменную, что бы в класс модуле прописать лишь один макрос реагирующий на изменение как в примере UserForm2 и Class2. Вот тут и возникла проблема. Если с однотипными боксами указать переменную легко, просто записав As MSForms.[тип бокса], [vba]
Код
Public WithEvents №№_TxBx As MSForms.TextBox Public WithEvents №№_CmBx As MSForms.ComboBox Public WithEvents №№_TgBt As MSForms.ToggleButton
[/vba] то что нужно писать для смешанных типов, я найти в инете не смог.
Помогите сделать UserForm2 работающим как задумано.ZetMenChavo
Весьма странно, что "контролов планируется не мало", а создаете вы их при этом вручную. И чтобы не прописывать макрос для каждого бокса можно написать 1 для всех: [vba]
Код
For Each c_ In Me.Controls
next
[/vba]
Весьма странно, что "контролов планируется не мало", а создаете вы их при этом вручную. И чтобы не прописывать макрос для каждого бокса можно написать 1 для всех: [vba]
mgt, так тут для примера сделал простенькую форму. В основной контролы будут оформляться: разные размеры, расцветки, списки, кнопки. В ручную их будет проще сделать чем макросом прописывать индивидуальные оформления.
Да и ваш совет
Цитата
написать 1 для всех
похоже не дописан. Вы показали пустой цикл For для контролов. Как это должно реагировать на изменения в контролах?
mgt, так тут для примера сделал простенькую форму. В основной контролы будут оформляться: разные размеры, расцветки, списки, кнопки. В ручную их будет проще сделать чем макросом прописывать индивидуальные оформления.
Да и ваш совет
Цитата
написать 1 для всех
похоже не дописан. Вы показали пустой цикл For для контролов. Как это должно реагировать на изменения в контролах?ZetMenChavo
Сообщение отредактировал ZetMenChavo - Среда, 12.07.2023, 16:37
mgt, вы похоже не поняли суть проблемы. Вопрос не в том, как реализовать отслеживание в контролерах (ибо я уже сделал начальный код для этого в примере UserForm1 и Class1), а как улучшить этот код загнав разнотипные контролеры в одну переменную в класс модуле тем самым избавившись от нагромождения строк кода, т.е. сделать пример UserForm2 и Class2 работающим.
mgt, вы похоже не поняли суть проблемы. Вопрос не в том, как реализовать отслеживание в контролерах (ибо я уже сделал начальный код для этого в примере UserForm1 и Class1), а как улучшить этот код загнав разнотипные контролеры в одну переменную в класс модуле тем самым избавившись от нагромождения строк кода, т.е. сделать пример UserForm2 и Class2 работающим.ZetMenChavo
Чуть дописал код в формах чтоб было видно, как работает система отслеживания изменений. Первая форма сильно обрезанная от основной, но суть процесса передаёт. В основной контролеров больше, имеют другие имена (не стандартные типа Label, TextBox и т.д.) и дополнительно для некоторых нужно ещё доп.условия прописывать. Вторая форма помогла бы мне упростить код, но она не работает так как задумано. И в этом состоит вопрос: можно ли заставить вторую форму работать, если да то как?
Чуть дописал код в формах чтоб было видно, как работает система отслеживания изменений. Первая форма сильно обрезанная от основной, но суть процесса передаёт. В основной контролеров больше, имеют другие имена (не стандартные типа Label, TextBox и т.д.) и дополнительно для некоторых нужно ещё доп.условия прописывать. Вторая форма помогла бы мне упростить код, но она не работает так как задумано. И в этом состоит вопрос: можно ли заставить вторую форму работать, если да то как?ZetMenChavo
Как это сделать я не знаю. Но даже если у вас это получится, то все равно придется из этой переменной их при проверке достать, определить тип, и обработать.
На вашем месте я бы создавал все объекты динамически, через цикл. Присваивал им имена, по принципу первый ряд - комбо11, текст11, текст21, тогл11, второй ряд - комбо12, текст12, текст22, тогл12. Хоть тыщу рядов. И проверка в цикле по рядам.
Как это сделать я не знаю. Но даже если у вас это получится, то все равно придется из этой переменной их при проверке достать, определить тип, и обработать.
На вашем месте я бы создавал все объекты динамически, через цикл. Присваивал им имена, по принципу первый ряд - комбо11, текст11, текст21, тогл11, второй ряд - комбо12, текст12, текст22, тогл12. Хоть тыщу рядов. И проверка в цикле по рядам.mgt