Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
С каких пор нумерация в массиве в дотнете начинается с 1?

Какой дотнет? Глаза разуй! :-)

Ответить

Номер ответа: 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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #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()
    ;DoWork (Me)
End Sub

Таким образом вы получите ссылку на форму где была кликнута кнопка.
Что касается ограничения на 5 форм, то как я говорил ранее необходимо просто завести глобальную переменную типа Integer и при создании формы увеличивать ее на 1, а при закрытии уменьшать ее на 1. Таким образом вы всегда будете знать количество запущенных форма. И посленее: В процедуре создания экземпляра формы проверять значение это переменной, если оно меньше 5 то делаем New UserForm1, если же равно 5 то говорим юзеру "Пошел нафиг с Новым Годом". Так же можно когда открывается 5-я форма дизейблить саму кнопку создания формы на листе.
И никаие массивы тут не нужны!!!

Надеюсь, на этот раз доступно объяснил?

P.S. Не заставляйте дедушку EROS'a садиться за VBA и вспоминать синтаксис VB - это плохо отразится на моем, подорванном "Нарзаном", здоровье.

Ответить

Номер ответа: 25
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #29
Добавлено: 30.07.08 14:00
    А мой вариант работает быстрее. :)
    Возник чисто теоретический вопрос. В методах самой формы нет метода Delete. По методу Me.Hide из самой формы она просто её скрывается и она остаётся в памяти. При этом счётчик мы уменьшаем и в следуший раз создаётся новый экземпляр формы. Таким образом в памяти накапливается всё больше и больше скрытых форм. Если я прав, то это — дурной тон в программировании. Решение есть? Или я неправ?

Ответить

Номер ответа: 30
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #30 Добавлено: 30.07.08 14:21
Там вроде есть Initialize/Terminate. Можно попробовать.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам