Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Я задал вопрос о способах синхронизации форм в MDI-приложениях на форуме VB.NET http://www.sql.ru/forum/actualthread.aspx?tid=296215 однако, во-первых, этот форум малопосещаем, во-вторых, подозреваю, это общая проблема управления окнами в виндузне, а не конкретная специфика VB.NET. Буду благодарен за ответы и советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 20:53 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Что такое "синхронизация форм" скажи пожалуйста ? Нет там никаких "общих" вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 09:47 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Посмотрите плиз топик выше на ссылке - я там свою проблему очень подробно сформулировал. С удовольствием приму все советы (можно прямо в том топике). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 11:16 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Прочитал нифига не понял. Видимо тебе нужно модальный диалог из формы сделать. Это вместо .Show надо вызывать .DoModal или .DialogBox , что-то в этом роде. Не знаю как на VB это называется. К многопоточности и синхронизации это не имеет никакого отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 14:38 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Модальный диалог ЗАКРОЕТ все MDI-приложение. А надо закрыть лишь цепочку конкретную форм. Например, юзер выполняет ща две работы - перечисляет деньги на счет и приходут товар на склад. Чтоб перечислить деньги - надо скажем выбрать счет, сумму и тд. - это модальная форма. Но выбор на ней не ДОЛЖЕН закрывать-блокировать его параллельную задачу - приходование на склад. А если дать МОДАЛЬНЫЙ ДИАЛОГ на ввод сумму перечисления денег, ОН ЗАКРОЕТ ВСЕ MDI-приложение, в том числе совершенно независимые параллельные задачи - приходование на склад в моем примере. А НУЖНО, чтобы модальный диалог на ввод суммы остался, юзер мог уйти в другое окно, там продолжать выполнять приходование. Потом вернулся на перевод денег, ввел сумму, и открылись следующие формы по переводу денег, ожидающие ввода суммы, но этот диалог ввода суммы не должен никак влиять ни на зачисление денег на склад, ни на работу с кадрами, ни на формирование прай-листа - в-общем НИ НА КАКОЮ из ИНЫХ последовательностей форм кроме перевода денег. А так не выходит. Модальная форма закрывает ВСЕ MDI-приложение, а не конкретную цепочку форм.... Видать я непонятно изъясняюсь, что никто не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:33 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
->Модальный диалог ЗАКРОЕТ все MDI-приложение. Ничего он не закроет. ->Но выбор на ней не ДОЛЖЕН закрывать-блокировать его параллельную ->задачу - приходование на склад. Почему не должен ? Что, пользователь сможет ОДНОВРЕМЕННО вводить и одно, и другое ? Пусть введет сначала одно, потом с другим будет уже работать. И это не задачи, это - окна. Если бы были задачи, то было бы то поведение, которое вы хотите. -> А НУЖНО, чтобы модальный диалог на ввод суммы остался, юзер мог уйти в -> другое окно, там продолжать выполнять приходование. Ничего, закроет модальный диалог, не развалится, а потом откроет еще раз. В двух модальных диалогах пользователь одновременно вводить не может. Модальность для того и нужна - ЗАСТАВИТЬ пользователя ввести здесь и сейчас что-то, а потом уже идти куда ему там надо. ->А так не выходит. Модальная форма закрывает ВСЕ MDI-приложение, а не ->конкретную цепочку форм.... ->Видать я непонятно изъясняюсь, что никто не понял... Да понял я, вы хотите того, чего модальные диалоги обеспечить не могут. Либо вы этого хотите напрасно, либо , если вам действительно это нужно, нужно по-другому проектировать пользовательский интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 19:58 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
а пользователь не может открыть два приложения, каждое из которых будет работать очевидным образом? если ему так хочеться две работы делать? чтобы свести программиста задачу к предыдущей, т.е нормальный mdi с нормальными модальными окнами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:09 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
В обычном торговом MDI-приложении цепочек последовательных и независимых форм для решения каждой задачи много. Есть обязательные формы - где результат каждой формы служит источником для последующей. Посмотрите пример в разделе VB.NET - ссылка выше - я привел там пример цепочки для решения ОДНОЙ такой задачи. Обязательные формы - там выпрыгивают всегда, необязательные(справочные) юзер отмечает галками. Подобных цепочек - в любом торговом приложении десятки. Никому не нужно приложение в котором скажем незвестен какой-то артикул - и приходование на склад выбросило модальную форму, из-за этого дурацкого модального окна скажем не выполняются отгрузки, импорт прайсов, перевод денег или увольнение сотрудников. Я даже обсуждать не буду качетсво таких приложений, где параллельно нельзя решать разные независимые задачи. Я говорю о КОНКРЕТНЫХ МЕХАНИЗМАХ СИНХРОНИЗАЦИИ ФОРМ на базе всего трех виндузовых примитивных оконных средств: 1. Окно в другом потоке (пример 4 в топике VB.NET) 2. Окно модальное в MDI (непригодно практически вообще ни для чего, кроме ввода пароля) 3. Наконец немодальное окно MDI - из которых и строятся все реальные приложения. И... Обсуждается конкретный механизм построения приложения из окон типа 3. Я таких механизмов знаю несколько. Например ща у меня запуск следующей MDI-формы в цепочки приостанавливается ПРОСТО ПО ОПРОСУ ФЛАЖКА который взводит предыдущая форма в FORM_CLOSE. Но кривизна такого решения просто режет глаза. К тому же вопрос с формами типа 1 так не решается. Другой механизм я видел в микрософтовских синхронизаторах форм. Там он активируется по FORM_Activate после чего опять же проверяются права (как юзер логинился в MDI), размеры окна и окно перепозиционируется во внуть MDI. Но то, что я видел - мне показалось кривым-перекривым и тоже не удовлетворило. По скорости - это даже хуже моего решения. НЕ ВЕРЮ ЧТО НЕТ ДРУГИХ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ЦЕПОЧЕК ФОРМ. И оттого и задаю эти вопросы на форуме. НО... хотелось бы услышать мнения и примеры синхронизаторов форм от тех программеров, кто сам писал подобные механизмы и MDI-приложения хотя бы с сотней форм. НЕ ВЕРЮ ЧТО MDI-приложение с сотней форм кто-то в безумии решится написать с модальными окнами и подвесить остальных 99 окон из-за того, что юзер не знает ответа на ввод в сотое окно. Следовательно те или иные механизмы синхронизации форм используются ВСЕ разработчики - хотелось бы услышать их мнения и увидеть примеры синхронизаторов в цепочках форм... Вот собственно и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:36 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Во нагнал! Да не существует такого понятия как "синхронизации форм"! Не синхронизирует никто ФОРМЫ. У нас объекты есть и у объектов есть параметры. Если работа с одним объектом требует модальности - его делают в модальном окне. Если работа с объектом не требует модальности его делают в не модальном окне. Не формы главное в приложении, а объекты которые через формы редактируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 01:02 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
vbnet2000: посмотрите на форуме по Delphi. Там этот вопрос всплывал много раз, и давались решения. У меня в приложении (Delphi win32) работает один из вариантов 1) вызывающая справочник форма дисэйблится 2) создается/открывается форма справочника - обычный mdi-child 3) крутится цикл Код: plaintext 1. 2. 3. 4. Неидеально, но работает. Думаю на VB то же самое сделать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 05:57 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Извините, квотировать не буду. В обычном торговом MDI-приложении Это типа новый тип приложений такой, да ? "Торговое MDI приложение ?". цепочек последовательных и независимых форм для решения каждой задачи много. Есть обязательные формы - где результат каждой формы служит источником для последующей. Если так, то их надо вызывать модально и последовательно. Посмотрите пример в разделе VB.NET - ссылка выше - я привел там пример цепочки для решения ОДНОЙ такой задачи. Не буду я смотреть. Есть много способов сделать неправильно, и только несколько правильно. Я даже обсуждать не буду качетсво таких приложений, где параллельно нельзя решать разные независимые задачи. У меня уже лет наверное 10 опыта разработок бизнес-приложений, и все ничего как-то, обходились. Учти, что чем более нестандартен интерфейс, тем более сложно его программировать, и тем сложнее он понимаем пользователями. Про HAMMER INTERFACE слыхал когда-нибудь ? Или Wisard-ы видал ? В общем не буду тебя за что-то агитировать типа советской власти, но учти, что то, чего ты хочешь, а именно, частично модальных в приложении окон, т.е. таких, которые бы "блокировали" только часть форм, нет. В Windows диалог может быть модальным на уровне приложения, тогда он блокирует все окна этого приложения, либо на уровне системы , тогда он блокирует вообще все окна данного пользователя (сеанса работы). НЕ ВЕРЮ ЧТО НЕТ ДРУГИХ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ЦЕПОЧЕК ФОРМ. И Нет такого понятия синхронизации форм. хотелось бы услышать мнения и примеры синхронизаторов форм от тех программеров, кто сам писал подобные механизмы и MDI-приложения хотя бы с сотней форм. Ну писали, правда не в MDI, но это все равно. НЕ ВЕРЮ ЧТО MDI-приложение с сотней форм кто-то в безумии решится написать с модальными окнами и подвесить остальных 99 окон Именно так. Ничего страшного нет в этом, потому что пользователь быстро введет ответ и закроет модальный диалог. ДЛЯ ЭТОГО МОДАЛЬНЫЙ ДИАЛОГ И НУЖЕН !!!. Если нужно что-то другое, то диалог не должен быть модальным, но зато ты потом замучиешся синхронизировать твои связанные окна. из-за того, что юзер не знает ответа на ввод в сотое окно. Так не фиг открывать это окно, если не знаешь, что вводить хочешь !! А если открыл, и не знаешь --- ну так закрой , подумай, и открой снова, в чем проблема-то ? Следовательно те или иные механизмы синхронизации форм используются ВСЕ разработчики - хотелось бы услышать их мнения и увидеть примеры синхронизаторов в цепочках форм... Нет никаких "механизмов синхронизации форм" и их никто не использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 10:54 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
isbnУ меня в приложении (Delphi win32) работает один из вариантов 1) вызывающая справочник форма дисэйблится 2) создается/открывается форма справочника - обычный mdi-child 3) крутится цикл Код: plaintext 1. 2. 3. 4. А нахрена такая самопальная реализация нужна, если есть нормальное стандартное модальное выполнение формы ? Чем это-то отличается от выполнения модальной формы и выхода из нее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 10:56 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext Спасибо isbn, именно этот вариант у меня сейчас и работает. Кстати вот в процессе этих диалогов на форуме и пришло решение - запускать следующую форму в цепочке не из основного потока (псевдопотока, который ждет опрашивая флажок перед запуском следующей формы цепочки) - а НЕПОСРЕДСТВЕННО ИЗ FORM_CLOSE... Технически это явно лучше синхронизаторов, которые я видел на основе FORM_Activate и решений на основе опроса флажка. Ща попробую все это скрутить. Только в практическом плане надо детали обдумать - если бы ВСЕ формы в цепочке были ТОЛЬКО так сказать псевдомодальные (где следующей нужен резальтат предыдущей), а ведь бывает еще куча справочных (в параллельных MDI-окнах) вспомогательных окон. Типа считать в Form_Close какую-то таблу, где описаны ВСЕ цепочки форм в MDI-приложении и прямо в Form_Close по этой табле выполнить запуск.... А синхронизацию по FORM_Activate думаю есть смысл оставить только для форм в ОТДЕЛЬНЫХ потоках (в виде некого модуля) - который по FORM_ACTIVATE будет просто вписывать форму отдельного потока в размеры MDI-окна. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 11:39 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Да, ребята, с кришей вообще не дружите видимо... Ну ладно, успехов в синхронизацциии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 13:55 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Юзер начал приходование товара на склад. На десятой форме (скажем где требуется классифицировать товар по групповой принадлежности) приложение спрашивает у него код группы, потом подргуппы, потом еще что-то... "Вот с**а, думает юзер, недавно научившийся отыскивать кнопку ПУСК на экране - что этой скотине еще от меня надо... Ладно придет вечером Машка - спрошу у нее, чего надо вводить в это окно... А пока займусь отгрузками..." Тот самый механизм, который притормозил приходование на склад и позволил юзеру переключится на отгрузки и называется МЕХАНИЗМОМ СИНХРОНИЗАЦИИ ФОРМ в MDI-ПРИЛОЖЕНИИ. Это я еще раз (последний) попробовал пояснить тем, кто так и не допер назначение этого механизма, но.... желающие могут продолжать считать, что такого механизма нет в природе и быть не должно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 14:05 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
vbnet2000...юзер, недавно научившийся отыскивать кнопку ПУСК ...МЕХАНИЗМОМ СИНХРОНИЗАЦИИ ФОРМ в MDI-ПРИЛОЖЕНИИ. Зачем изобретать себе грабли и потом на них наступать? Три варианта решения, сходу - если подумать, может и еще что придумается: 1. Пусть неопытный пользователь закрывает все, что связано с приемом товара на склад и занимается отгрузками. Все что нужно, внесет заново вечером. Ну разве что если в промежуточных этапах внесено много данных - хранить их с пометкой "временные" и снова показывать, когда пользователь вернется к тому же месту. Все равно человек не в состоянии качественно и одновременно делать несколько различных дел. 2. Открыть вторую/третью/четвертую копию приложения. 3. Использовать Wizards и вообще отказаться от модальных окон для длительной обработки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 15:03 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Andres 1 1. хранить их с пометкой "временные" - Ну это в базе. Так происходит по любому - я все заполняю в базах с посфиксом NEW, а на последней форме уже заливаю в постоянную базу. Естественно в любой момент можно грохнуть врменные данные и отказаться от их заливки в постоянную базу. Но обсуждается ЭКРАННЫЙ механизм - как одну форму запустить строго после другой (в одной цепочке) и дать свободно уйти в другую цепочку. Как вогнать форму вообще другого потока в границы окна MDI-приложения. Чуствуете разницу относительно "данные в базе хранятся с пометкой временные"? 2. Вторая копия MDI-приложения? Нереально.... Логины, авторизация, новые порты TCP/IP для связи с прокси, всякие номера сеансов...Нереально... 3. "Использовать Wizards и вообще отказаться от модальных окон для длительной обработки данных." - именно МЕХАНИЗМ собственной организации такого визарда и обсуждается. Механизм организации псевдомодальности (в пределах единой цепочки) из немодальных форм. Но не ограничивающий выполнения других (не связанных) цепочек. Чтоб формы другого потока не выпрыгивали ВНЕ окна визарда... Чтоб из одного визарда безболезненно можно было бы уйти в другой.. Чтоб отдельно отлаженные формы не переделывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 17:55 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
vbnet2000Юзер начал приходование товара на склад. На десятой форме (скажем где требуется классифицировать товар по групповой принадлежности) приложение спрашивает у него код группы, потом подргуппы, потом еще что-то...Крыша в пути.... Зачем десять форм?! Не проще сделать одну форму с десятью выпадающими списками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 18:52 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
vbnet2000 Это я еще раз (последний) попробовал пояснить тем, кто так и не допер назначение этого механизма, но.... А у нас в таком случае пользователь просто закрывал окно и все его данные сохранялись в БД до "пока Машка прийдет". Правда, необычный подход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 19:24 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext Ну например вот такой фрагмент цепочки между пятой и шестой формой в цепочеке обновления прайса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. потом делать еще гору шагов, которые просто НЕЛЬЗЯ сохранить ИЛИ НЕВЕРОЯТНО СЛОЖНО. К тому же СЛЕДУЮЩИЙ ЗАПУСК ЭТОЙ ЦЕПОЧКИ ПРИВЕДЕТ К СЛЕДУЮЩЕМУ ОБНОВЛЕНИЮ ПРАЙСА уже совершенно на другую дату. И весь предлагаемый вами гимор повторного прохода ПО ТЕМ ЖЕ ВРЕМЕННЫМ ДАННЫМ, чтобы просто НЕ ПИСАТЬ СИНХРОНИЗАТОРА ФОРМ в двадцать строчек в NextStep.Invoke ??? Одного-единственного на все приложение??? Модератор: просьба не выходить за рамки Вашего вопроса и перестать выдавать рекомендации другим участникам форума о которых они Вас не просили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 22:42 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
vbnet2000Надо быть просто БЕЗУМНЫМ, чтобы заново дергать сайт поставщика, проводить раззиповку скачанного (довольно долго она происходит), потом делать еще гору шагов, которые просто НЕЛЬЗЯ сохранить ИЛИ НЕВЕРОЯТНО СЛОЖНО. К тому же СЛЕДУЮЩИЙ ЗАПУСК ЭТОЙ ЦЕПОЧКИ ПРИВЕДЕТ К СЛЕДУЮЩЕМУ ... Как-то уж больно нестандартно вы мыслите... Он может быть и хорошо, да только много вам писать придется.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 02:37 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Неспроста M$ не рекомендует MDI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 15:58 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
Нефиг бизнес логику на визуальных объектах (формах,окнах) реализовывать Мухи отдельно, котлеты отдельно. P.S. Каждый Буратино сам себе Карабас-Барабас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 22:51 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
интересно, как правило Кернигана работает на таком жизненном примере. )) Сергей ФроловСложно сказать что-то кратко по заданному вопросу. Лучше почитать С.Макконнелла "Совершенный код". Там все подробно описано. Отлаживать код вдвойне сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. (Brian W. Kernighan) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 22:59 |
|
||
|
Построение MDI-приложений
|
|||
|---|---|---|---|
|
#18+
гы, "старательно обходя разложенные грабли, ты теряешь драгоценный ОПЫТ!" (анекдот) ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 15:12 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33754517&tid=1346805]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 445ms |

| 0 / 0 |
