Страница: 1 | 2 | 3 |
Вопрос: Выозов нескольких копий формы
Добавлено: 26.07.08 13:15
Автор вопроса: Jasmin
Ответы
Всего ответов: 42
Номер ответа: 16
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #16
Добавлено: 29.07.08 21:41
УРА!!! Огромное СПАСИБО !!! Все получилось как нужно.
"Закрывать" более раннюю не нужно, так как формы выводятся для просмотра и визуального сравнения данных. Неизвестно какие нужно оставить, а какие скрыть. Пусть клиент сам решает какие оставить на экране. Ненужные пусть приучается закрывать сразу по ненужности. Дрессируется так сказать.
Номер ответа: 17
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #17
Добавлено: 29.07.08 22:09
Какой дотнет? Глаза разуй!
Номер ответа: 18
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #18
Добавлено: 29.07.08 22:11
Повторяю свой вопрос.. ЗАЧЕМ НУЖЕН ЭТОТ МАССИВ? КАКОВА ЕГО ЦЕЛЬ И В ЧЕМ ЕГО СМЫСЛ?
Номер ответа: 19
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #19
Добавлено: 29.07.08 22:38
TO EROS:
Раз пользователь открыл форму. Переменная = 1.
Два пользователь открыл форму. Переменная = 2.
Три пользователь открыл форму. Переменная = 3.
Четыре пользователь открыл форму. Переменная = 4.
Пользователь закрыл форму 2. Переменная = 3.
Пользователь нажал обработку на форме 2. Как определить, что данные нужно брать именно с формы 2 ?
Просто для подсчета копий согласна можно.
Номер ответа: 20
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #20
Добавлено: 29.07.08 22:38
Чтобы работать с методами Hide, Show, не создавая и не уничтожая формы в процессе. Это вопрос всего лишь выбора пути решения задачи.
Номер ответа: 21
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #21
Добавлено: 29.07.08 22:38
Ошиблась обработка на форме 4, например.
Номер ответа: 22
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #22
Добавлено: 29.07.08 22:50
Согласен с EROS, что можно и не держать в памяти ссылки на создзанные формы. Тогда при создании очередной формы через set a = New UserForm ссылка на предыдущую форму утрачивается и доступ к ней по ссылке — тоже. Но он, похоже, в этой задаче и не нужен.
Моё решение будет просто быстрее работать, хотя вопрос "быстроты" при современных тактовых частотах часто не имеет никакого смысла.
Наверное, на моё решение влияет тот факт, что я когда-то работал на машинах с тактовой частотой всего 10 кГц.
Номер ответа: 23
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #23
Добавлено: 29.07.08 22:54
ADSemenov.ru: Еще раз спасибо за совет. Доступ очень даже нужен.
Номер ответа: 24
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #24
Добавлено: 30.07.08 08:23
Вы снова отказываетесь меня понимать. Что мешает вам передать в макрос ссылку на форму в качестве параметра? Почему вы не можете по клику на кнопке "Обработать данные" вызвать макрос передав ему ссылку на форму?
Где нибудь в модуле или в книге написать что то типа этого
Public Sub DoWork(frm As UserForm1)
'//
Debug.Print frm.Caption
End Sub
А в обработчике клика кнопки сделать вызов этого метода
Private Sub CommandButton1_Click()
 oWork (Me)
End Sub
Таким образом вы получите ссылку на форму где была кликнута кнопка.
Что касается ограничения на 5 форм, то как я говорил ранее необходимо просто завести глобальную переменную типа Integer и при создании формы увеличивать ее на 1, а при закрытии уменьшать ее на 1. Таким образом вы всегда будете знать количество запущенных форма. И посленее: В процедуре создания экземпляра формы проверять значение это переменной, если оно меньше 5 то делаем New UserForm1, если же равно 5 то говорим юзеру "Пошел нафиг с Новым Годом". Так же можно когда открывается 5-я форма дизейблить саму кнопку создания формы на листе.
И никаие массивы тут не нужны!!!
Надеюсь, на этот раз доступно объяснил?
P.S. Не заставляйте дедушку EROS'a садиться за VBA и вспоминать синтаксис VB - это плохо отразится на моем, подорванном "Нарзаном", здоровье.
Номер ответа: 25
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #25
Добавлено: 30.07.08 10:13
То есть, процедуру обработки данных по кнопке на форме вынести из кода формы в отдельный модуль и обозвать Public. Туда же и контрольную переменную.
Тогда бы мы сразу всё поняли.
Номер ответа: 26
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #26
Добавлено: 30.07.08 11:51
Вот теперь все понятно. Мы не специально , просто долго доходит.
Всем спасибо.
Номер ответа: 27
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #27
Добавлено: 30.07.08 13:45
Ну наконец-то... победили.. (смахнул пот со лба)
Номер ответа: 28
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #28
Добавлено: 30.07.08 13:47
EROS - археолог
Номер ответа: 29
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #29
Добавлено: 30.07.08 14:00
А мой вариант работает быстрее.
Возник чисто теоретический вопрос. В методах самой формы нет метода Delete. По методу Me.Hide из самой формы она просто её скрывается и она остаётся в памяти. При этом счётчик мы уменьшаем и в следуший раз создаётся новый экземпляр формы. Таким образом в памяти накапливается всё больше и больше скрытых форм. Если я прав, то это — дурной тон в программировании. Решение есть? Или я неправ?
Номер ответа: 30
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #30
Добавлено: 30.07.08 14:21
Там вроде есть Initialize/Terminate. Можно попробовать.