Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Построение MDI-приложений / 25 сообщений из 25, страница 1 из 1
24.05.2006, 20:53
    #33749831
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Я задал вопрос о способах синхронизации форм в MDI-приложениях на форуме VB.NET
http://www.sql.ru/forum/actualthread.aspx?tid=296215
однако,
во-первых, этот форум малопосещаем,
во-вторых, подозреваю, это общая проблема управления окнами в виндузне, а не конкретная специфика VB.NET.

Буду благодарен за ответы и советы.
...
Рейтинг: 0 / 0
25.05.2006, 09:47
    #33750335
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Что такое "синхронизация форм" скажи пожалуйста ? Нет там никаких "общих" вопросов.
...
Рейтинг: 0 / 0
25.05.2006, 11:16
    #33750665
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Посмотрите плиз топик выше на ссылке - я там свою проблему очень подробно сформулировал.
С удовольствием приму все советы (можно прямо в том топике).
...
Рейтинг: 0 / 0
25.05.2006, 14:38
    #33751597
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Прочитал нифига не понял. Видимо тебе нужно модальный диалог из формы сделать. Это вместо .Show надо вызывать .DoModal или .DialogBox , что-то в этом роде. Не знаю как на VB это называется.
К многопоточности и синхронизации это не имеет никакого отношения.
...
Рейтинг: 0 / 0
25.05.2006, 15:33
    #33751835
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Модальный диалог ЗАКРОЕТ все MDI-приложение. А надо закрыть лишь цепочку конкретную форм. Например, юзер выполняет ща две работы - перечисляет деньги на счет и приходут товар на склад. Чтоб перечислить деньги - надо скажем выбрать счет, сумму и тд. - это модальная форма. Но выбор на ней не ДОЛЖЕН закрывать-блокировать его параллельную задачу - приходование на склад. А если дать МОДАЛЬНЫЙ ДИАЛОГ на ввод сумму перечисления денег, ОН ЗАКРОЕТ ВСЕ MDI-приложение, в том числе совершенно независимые параллельные задачи - приходование на склад в моем примере. А НУЖНО, чтобы модальный диалог на ввод суммы остался, юзер мог уйти в другое окно, там продолжать выполнять приходование. Потом вернулся на перевод денег, ввел сумму, и открылись следующие формы по переводу денег, ожидающие ввода суммы, но этот диалог ввода суммы не должен никак влиять ни на зачисление денег на склад, ни на работу с кадрами, ни на формирование прай-листа - в-общем НИ НА КАКОЮ из ИНЫХ последовательностей форм кроме перевода денег.
А так не выходит. Модальная форма закрывает ВСЕ MDI-приложение, а не конкретную цепочку форм....
Видать я непонятно изъясняюсь, что никто не понял...
...
Рейтинг: 0 / 0
25.05.2006, 19:58
    #33752638
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
->Модальный диалог ЗАКРОЕТ все MDI-приложение.

Ничего он не закроет.

->Но выбор на ней не ДОЛЖЕН закрывать-блокировать его параллельную
->задачу - приходование на склад.

Почему не должен ? Что, пользователь сможет ОДНОВРЕМЕННО вводить и одно, и другое ? Пусть введет сначала одно, потом с другим будет уже работать.

И это не задачи, это - окна. Если бы были задачи, то было бы то поведение, которое вы хотите.

-> А НУЖНО, чтобы модальный диалог на ввод суммы остался, юзер мог уйти в
-> другое окно, там продолжать выполнять приходование.

Ничего, закроет модальный диалог, не развалится, а потом откроет еще раз.
В двух модальных диалогах пользователь одновременно вводить не может.
Модальность для того и нужна - ЗАСТАВИТЬ пользователя ввести здесь и сейчас что-то, а потом уже идти куда ему там надо.

->А так не выходит. Модальная форма закрывает ВСЕ MDI-приложение, а не
->конкретную цепочку форм....
->Видать я непонятно изъясняюсь, что никто не понял...

Да понял я, вы хотите того, чего модальные диалоги обеспечить не могут. Либо вы этого хотите напрасно, либо , если вам действительно это нужно, нужно по-другому проектировать пользовательский интерфейс.
...
Рейтинг: 0 / 0
25.05.2006, 23:09
    #33752854
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
а пользователь не может открыть два приложения, каждое из которых будет работать очевидным образом? если ему так хочеться две работы делать?


чтобы свести программиста задачу к предыдущей, т.е нормальный mdi с нормальными модальными окнами.
...
Рейтинг: 0 / 0
25.05.2006, 23:36
    #33752860
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
В обычном торговом MDI-приложении цепочек последовательных и независимых форм для решения каждой задачи много. Есть обязательные формы - где результат каждой формы служит источником для последующей. Посмотрите пример в разделе VB.NET - ссылка выше - я привел там пример цепочки для решения ОДНОЙ такой задачи. Обязательные формы - там выпрыгивают всегда, необязательные(справочные) юзер отмечает галками. Подобных цепочек - в любом торговом приложении десятки. Никому не нужно приложение в котором скажем незвестен какой-то артикул - и приходование на склад выбросило модальную форму, из-за этого дурацкого модального окна скажем не выполняются отгрузки, импорт прайсов, перевод денег или увольнение сотрудников. Я даже обсуждать не буду качетсво таких приложений, где параллельно нельзя решать разные независимые задачи.

Я говорю о КОНКРЕТНЫХ МЕХАНИЗМАХ СИНХРОНИЗАЦИИ ФОРМ на базе всего трех виндузовых примитивных оконных средств:
1. Окно в другом потоке (пример 4 в топике VB.NET)
2. Окно модальное в MDI (непригодно практически вообще ни для чего, кроме ввода пароля)
3. Наконец немодальное окно MDI - из которых и строятся все реальные приложения.

И... Обсуждается конкретный механизм построения приложения из окон типа 3. Я таких механизмов знаю несколько. Например ща у меня запуск следующей MDI-формы в цепочки приостанавливается ПРОСТО ПО ОПРОСУ ФЛАЖКА который взводит предыдущая форма в FORM_CLOSE. Но кривизна такого решения просто режет глаза. К тому же вопрос с формами типа 1 так не решается.

Другой механизм я видел в микрософтовских синхронизаторах форм. Там он активируется по FORM_Activate после чего опять же проверяются права (как юзер логинился в MDI), размеры окна и окно перепозиционируется во внуть MDI. Но то, что я видел - мне показалось кривым-перекривым и тоже не удовлетворило. По скорости - это даже хуже моего решения.

НЕ ВЕРЮ ЧТО НЕТ ДРУГИХ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ЦЕПОЧЕК ФОРМ. И оттого и задаю эти вопросы на форуме. НО...
хотелось бы услышать мнения и примеры синхронизаторов форм от тех программеров, кто сам писал подобные механизмы и MDI-приложения хотя бы с сотней форм. НЕ ВЕРЮ ЧТО MDI-приложение с сотней форм кто-то в безумии решится написать с модальными окнами и подвесить остальных 99 окон из-за того, что юзер не знает ответа на ввод в сотое окно. Следовательно те или иные механизмы синхронизации форм используются ВСЕ разработчики - хотелось бы услышать их мнения и увидеть примеры синхронизаторов в цепочках форм... Вот собственно и все...
...
Рейтинг: 0 / 0
26.05.2006, 01:02
    #33752912
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Во нагнал!
Да не существует такого понятия как "синхронизации форм"! Не синхронизирует никто ФОРМЫ. У нас объекты есть и у объектов есть параметры. Если работа с одним объектом требует модальности - его делают в модальном окне. Если работа с объектом не требует модальности его делают в не модальном окне.
Не формы главное в приложении, а объекты которые через формы редактируются.
...
Рейтинг: 0 / 0
26.05.2006, 05:57
    #33752970
isbn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
vbnet2000: посмотрите на форуме по Delphi. Там этот вопрос всплывал много раз, и давались решения.

У меня в приложении (Delphi win32) работает один из вариантов
1) вызывающая справочник форма дисэйблится
2) создается/открывается форма справочника - обычный mdi-child
3) крутится цикл
Код: plaintext
1.
2.
3.
4.
while not флажок do begin 
  Application.ProcessMessages;
  Sleep( 10 );
end;
4) флажок устанавливается в FormClose - цикл прекращается, данные из справочника передаются в первую форму, справочник закрывается/уничтожается, первая форма разрешается.

Неидеально, но работает. Думаю на VB то же самое сделать можно.
...
Рейтинг: 0 / 0
26.05.2006, 10:54
    #33753425
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Извините, квотировать не буду.

В обычном торговом MDI-приложении

Это типа новый тип приложений такой, да ? "Торговое MDI приложение ?".


цепочек последовательных и независимых форм для решения каждой задачи много. Есть обязательные формы - где результат каждой формы служит источником для последующей.

Если так, то их надо вызывать модально и последовательно.

Посмотрите пример в разделе VB.NET - ссылка выше - я привел там пример цепочки для решения ОДНОЙ такой задачи.

Не буду я смотреть. Есть много способов сделать неправильно, и только несколько правильно.

Я даже обсуждать не буду качетсво таких приложений, где параллельно нельзя решать разные независимые задачи.


У меня уже лет наверное 10 опыта разработок бизнес-приложений, и все ничего как-то, обходились. Учти, что чем более нестандартен интерфейс, тем более сложно его программировать, и тем сложнее он понимаем пользователями. Про HAMMER INTERFACE слыхал когда-нибудь ? Или Wisard-ы видал ?
В общем не буду тебя за что-то агитировать типа советской власти, но учти, что то, чего ты хочешь, а именно, частично модальных в приложении окон, т.е. таких, которые бы "блокировали" только часть форм, нет. В Windows диалог может быть модальным на уровне приложения, тогда он блокирует все окна этого приложения, либо на уровне системы , тогда он блокирует вообще все окна данного пользователя (сеанса работы).


НЕ ВЕРЮ ЧТО НЕТ ДРУГИХ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ЦЕПОЧЕК ФОРМ. И

Нет такого понятия синхронизации форм.

хотелось бы услышать мнения и примеры синхронизаторов форм от тех программеров, кто сам писал подобные механизмы и MDI-приложения хотя бы с сотней форм.

Ну писали, правда не в MDI, но это все равно.

НЕ ВЕРЮ ЧТО MDI-приложение с сотней форм кто-то в безумии решится написать с модальными окнами и подвесить остальных 99 окон

Именно так. Ничего страшного нет в этом, потому что пользователь быстро введет ответ и закроет модальный диалог. ДЛЯ ЭТОГО МОДАЛЬНЫЙ ДИАЛОГ И НУЖЕН !!!. Если нужно что-то другое, то диалог не должен быть модальным, но зато ты потом замучиешся синхронизировать твои связанные окна.

из-за того, что юзер не знает ответа на ввод в сотое окно.

Так не фиг открывать это окно, если не знаешь, что вводить хочешь !!
А если открыл, и не знаешь --- ну так закрой , подумай, и открой снова,
в чем проблема-то ?

Следовательно те или иные механизмы синхронизации форм используются ВСЕ разработчики - хотелось бы услышать их мнения и увидеть примеры
синхронизаторов в цепочках форм...

Нет никаких "механизмов синхронизации форм" и их никто не использует.
...
Рейтинг: 0 / 0
26.05.2006, 10:56
    #33753430
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
isbnУ меня в приложении (Delphi win32) работает один из вариантов
1) вызывающая справочник форма дисэйблится
2) создается/открывается форма справочника - обычный mdi-child
3) крутится цикл
Код: plaintext
1.
2.
3.
4.
while not флажок do begin 
  Application.ProcessMessages;
  Sleep( 10 );
end;
4) флажок устанавливается в FormClose - цикл прекращается, данные из справочника передаются в первую форму, справочник закрывается/уничтожается, первая форма разрешается.


А нахрена такая самопальная реализация нужна, если есть нормальное стандартное модальное выполнение формы ? Чем это-то отличается от выполнения модальной формы и выхода из нее ?
...
Рейтинг: 0 / 0
26.05.2006, 11:39
    #33753602
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Код: plaintext
White Owl - Да не существует такого понятия как "синхронизации форм"!
Код: plaintext
MasterZiv - Нет никаких "механизмов синхронизации форм" и их никто не использует.
Без комментариев...


Спасибо isbn, именно этот вариант у меня сейчас и работает. Кстати вот в процессе этих диалогов на форуме и пришло решение - запускать следующую форму в цепочке не из основного потока (псевдопотока, который ждет опрашивая флажок перед запуском следующей формы цепочки) - а НЕПОСРЕДСТВЕННО ИЗ FORM_CLOSE...

Технически это явно лучше синхронизаторов, которые я видел на основе FORM_Activate и решений на основе опроса флажка. Ща попробую все это скрутить. Только в практическом плане надо детали обдумать - если бы ВСЕ формы в цепочке были ТОЛЬКО так сказать псевдомодальные (где следующей нужен резальтат предыдущей), а ведь бывает еще куча справочных (в параллельных MDI-окнах) вспомогательных окон. Типа считать в Form_Close какую-то таблу, где описаны ВСЕ цепочки форм в MDI-приложении и прямо в Form_Close по этой табле выполнить запуск....

А синхронизацию по FORM_Activate думаю есть смысл оставить только для форм в ОТДЕЛЬНЫХ потоках (в виде некого модуля) - который по FORM_ACTIVATE будет просто вписывать форму отдельного потока в размеры MDI-окна.

Код: plaintext
 посмотрите на форуме по Delphi. Там этот вопрос всплывал много раз, и давались решения. 
дельфями не владею, но попробовать понять можно...
...
Рейтинг: 0 / 0
26.05.2006, 13:55
    #33754275
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Да, ребята, с кришей вообще не дружите видимо...
Ну ладно, успехов в синхронизацциии.
...
Рейтинг: 0 / 0
26.05.2006, 14:05
    #33754319
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Юзер начал приходование товара на склад. На десятой форме (скажем где требуется классифицировать товар по групповой принадлежности) приложение спрашивает у него код группы, потом подргуппы, потом еще что-то... "Вот с**а, думает юзер, недавно научившийся отыскивать кнопку ПУСК на экране - что этой скотине еще от меня надо... Ладно придет вечером Машка - спрошу у нее, чего надо вводить в это окно... А пока займусь отгрузками..."

Тот самый механизм, который притормозил приходование на склад и позволил юзеру переключится на отгрузки и называется МЕХАНИЗМОМ СИНХРОНИЗАЦИИ ФОРМ в MDI-ПРИЛОЖЕНИИ.

Это я еще раз (последний) попробовал пояснить тем, кто так и не допер назначение этого механизма, но....
желающие могут продолжать считать, что такого механизма нет в природе и быть не должно...
...
Рейтинг: 0 / 0
26.05.2006, 15:03
    #33754517
Andres 1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
vbnet2000...юзер, недавно научившийся отыскивать кнопку ПУСК
...МЕХАНИЗМОМ СИНХРОНИЗАЦИИ ФОРМ в MDI-ПРИЛОЖЕНИИ.
Зачем изобретать себе грабли и потом на них наступать?
Три варианта решения, сходу - если подумать, может и еще что придумается:

1. Пусть неопытный пользователь закрывает все, что связано с приемом товара на склад и занимается отгрузками. Все что нужно, внесет заново вечером. Ну разве что если в промежуточных этапах внесено много данных - хранить их с пометкой "временные" и снова показывать, когда пользователь вернется к тому же месту. Все равно человек не в состоянии качественно и одновременно делать несколько различных дел.

2. Открыть вторую/третью/четвертую копию приложения.

3. Использовать Wizards и вообще отказаться от модальных окон для длительной обработки данных.
...
Рейтинг: 0 / 0
26.05.2006, 17:55
    #33755203
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Andres 1

1. хранить их с пометкой "временные" - Ну это в базе. Так происходит по любому - я все заполняю в базах с посфиксом NEW, а на последней форме уже заливаю в постоянную базу. Естественно в любой момент можно грохнуть врменные данные и отказаться от их заливки в постоянную базу. Но обсуждается ЭКРАННЫЙ механизм - как одну форму запустить строго после другой (в одной цепочке) и дать свободно уйти в другую цепочку. Как вогнать форму вообще другого потока в границы окна MDI-приложения. Чуствуете разницу относительно "данные в базе хранятся с пометкой временные"?

2. Вторая копия MDI-приложения? Нереально.... Логины, авторизация, новые порты TCP/IP для связи с прокси, всякие номера сеансов...Нереально...

3. "Использовать Wizards и вообще отказаться от модальных окон для длительной обработки данных." - именно МЕХАНИЗМ собственной организации такого визарда и обсуждается. Механизм организации псевдомодальности (в пределах единой цепочки) из немодальных форм. Но не ограничивающий выполнения других (не связанных) цепочек. Чтоб формы другого потока не выпрыгивали ВНЕ окна визарда... Чтоб из одного визарда безболезненно можно было бы уйти в другой.. Чтоб отдельно отлаженные формы не переделывать...
...
Рейтинг: 0 / 0
26.05.2006, 18:52
    #33755341
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
vbnet2000Юзер начал приходование товара на склад. На десятой форме (скажем где требуется классифицировать товар по групповой принадлежности) приложение спрашивает у него код группы, потом подргуппы, потом еще что-то...Крыша в пути....

Зачем десять форм?! Не проще сделать одну форму с десятью выпадающими списками?
...
Рейтинг: 0 / 0
26.05.2006, 19:24
    #33755408
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
vbnet2000
Это я еще раз (последний) попробовал пояснить тем, кто так и не допер назначение этого механизма, но....


А у нас в таком случае пользователь просто закрывал окно и все его данные сохранялись в БД до "пока Машка прийдет". Правда, необычный подход?
...
Рейтинг: 0 / 0
26.05.2006, 22:42
    #33755596
vbnet2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Код: 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(StepOfImport.MapTovar)
        If CurrentImportRow.Cells(CType(StepOfImport.MapTovar, Integer)).Value Then
            Dim fr5 As New ImportContents.frTovarMap
            fr5.MdiParent = CurrentImportRow.DataGridView.Parent.TopLevelControl
            fr5.Show()
        End If

        Dim URL As String = CurrentImportRow.Cells(CType(StepOfImport.URL, Integer)).Value
        If URL = "" Then Exit Sub
        ''Try
        My.Application.DoEvents()
        ''Cursor.Current = Cursors.WaitCursor

        ''******************************************************************
        ''скачиваем ********************************************************
        NextStep.Invoke(StepOfImport.Web)
        Dim ZipXLS As Byte() = GetWebContents(URL)
        If ZipXLS Is Nothing Then Exit Sub
        ''Dim ZipXLS As Byte() = ArrLoadFromFile("c:\1.zip") 'отладка чтоб сайт не дергать

        '*****************************************************************
        ''сохраняем и распаковываем файл **********************************
        NextStep.Invoke(StepOfImport.UnZip)
        Dim FileName As String = URL
        Dim InvalidFileChars As Char() = System.IO.Path.GetInvalidFileNameChars()
        Dim One As Char ''удаляем неверные значки
        For Each One In InvalidFileChars
            FileName = Replace(FileName, One, "_")
        Next
        FileName = System.IO.Path.GetTempPath & FileName
        ArrSaveToFile(ZipXLS, ZipXLS.Length, FileName)
        ''
        UnZipWinFolder(FileName, System.IO.Path.GetTempPath)

        ''*****************************************************************
        ''просмотр скачанного XLS-файла ***********************************
        If CurrentImportRow.Cells(CType(StepOfImport.LookXLS, Integer)).Value Then
            System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(System.IO.Path.GetTempPath))
        End If

        ''*****************************************************************
        ''грузим в Excel, перед этим очищаем таблу ************************
        NextStep.Invoke(StepOfImport.XLS_SQL)
        CN = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ImportContents.Settings.PriceConnectionString").ConnectionString.ToString)
        CN.Open()
        CMD = New System.Data.SqlClient.SqlCommand("delete from BXDNew", CN)
        CMD.ExecuteNonQuery()
        CN.Close() : CMD = Nothing
        ''
        Dim XLS As New Microsoft.Office.Interop.Excel.Application
        If XLS Is Nothing Then Exit Sub
        Dim Page = XLS.Workbooks.Open(System.IO.Path.GetTempPath & "\" & "BXD.XLS")
        ''
        Load_MgXLS_toSQL(XLS, "BXD", StepRow, NewLine)
        ''
        ''закрываем Excel и создаем экземпляры Dataset
        XLS.Workbooks.Close()
        XLS.Quit()
        XLS = Nothing
        Dim NewDataSet As New SHDataSet
        Dim NewTableAdapter As New ImportContents.SHDataSetTableAdapters.BXDTableAdapter
        Dim NewQueries As New ImportContents.SHDataSetTableAdapters.QueriesTableAdapter

        ''*****************************************************************
        ''загружаем контент и рисунок *************************************
        NextStep.Invoke(StepOfImport.DownloadContents)
        Import_Content(NewDataSet, NewTableAdapter, StepRow, NewLine)

        ''*****************************************************************
        ''удаляем рисунок - "Рисунок недоступен" **************************
        NextStep.Invoke(StepOfImport.DeleteBlankImage)
        Call DeleteBlankImage("BXDNew")

        ''****************************************************************
        ''просмотр скачанного контента - факультативно *********************
        NextStep.Invoke(StepOfImport.LookContents)
        If CurrentImportRow.Cells(CType(StepOfImport.LookContents, Integer)).Value Then
            Dim fr5a As New ImportContents.frMgLookContents
            fr5a.MdiParent = CurrentImportRow.DataGridView.Parent.TopLevelControl
            fr5a.Show()
        End If

        ''*****************************************************************
        ''распарсиваем скачанный контент **********************************
        NextStep.Invoke(StepOfImport.ParseContents)
        Parse_Content(NewDataSet, NewTableAdapter, NewQueries, StepRow, NewLine)


        ''*****************************************************************
        ''сохранение нового прайса .NEW в старый  ************
        NextStep.Invoke(StepOfImport.SavePrice)
        CN = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ImportContents.Settings.PriceConnectionString").ConnectionString.ToString)
        CN.Open()
        CMD = New System.Data.SqlClient.SqlCommand("SaveToMgPrice", CN)
        CMD.CommandType = Data.CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        CN.Close() : CMD = Nothing

        ''*****************************************************************
        ''сохранение нового прайса .NEW в мой прайс ***********************
        NextStep.Invoke(StepOfImport.SavePrice)
        CN = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ImportContents.Settings.PriceConnectionString").ConnectionString.ToString)
        CN.Open()
        CMD = New System.Data.SqlClient.SqlCommand("SaveToSHPrice", CN)
        CMD.CommandType = Data.CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        CN.Close() : CMD = Nothing


        ''*****************************************************************
        ''мапирование групп ***********************************************
        NextStep.Invoke(StepOfImport.MapGroup)
        CN = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ImportContents.Settings.PriceConnectionString").ConnectionString.ToString)
        CN.Open()
        CMD = New System.Data.SqlClient.SqlCommand("SaveGroup", CN)
        CMD.CommandType = Data.CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        CN.Close() : CMD = Nothing


        ''*****************************************************************
        ''докачиваем контент в ссылках ************************************
        NextStep.Invoke(StepOfImport.DowloadRefContents)
        ''это неверно - очень долго - надо просто будет сделать правильный отбор в следующие два шага
        CN = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ImportContents.Settings.PriceConnectionString").ConnectionString.ToString)
        CN.Open()
        CMD = New System.Data.SqlClient.SqlCommand("CopyRefPageContents", CN)
        CMD.CommandType = Data.CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        CN.Close() : CMD = Nothing
        ''теперь докачиваем ранее не встречавшиеся странички и рисунки
        Dim DS_NewValue As New ImportContents.MgValueDS
        Dim TA_NewValue As New ImportContents.MgValueDSTableAdapters.MgValueTabTableAdapter
        Dim QA_NewValue As New ImportContents.MgValueDSTableAdapters.QueriesTableAdapter
        Call DownLoadRefPage(DS_NewValue, TA_NewValue, QA_NewValue)
        ''удаляем картинку "Рисунок недоступен"
        Call DeleteBlankImage("MgValueNew")


        ''*****************************************************************
        ''расставляем указатели в ссылках вручную *************************
        NextStep.Invoke(StepOfImport.RefLinkManual)
        ''насколько это корректно?
        If CurrentImportRow.Cells(CType(StepOfImport.RefLinkManual, Integer)).Value Then
            Dim fr6 As New ImportContents.frMgRefLink
            fr6.MdiParent = CurrentImportRow.DataGridView.Parent.TopLevelControl
            fr6.Show()
        End If
Надо быть просто БЕЗУМНЫМ, чтобы заново дергать сайт поставщика, проводить раззиповку скачанного (довольно долго она происходит),
потом делать еще гору шагов, которые просто НЕЛЬЗЯ сохранить ИЛИ НЕВЕРОЯТНО СЛОЖНО.
К тому же СЛЕДУЮЩИЙ ЗАПУСК ЭТОЙ ЦЕПОЧКИ ПРИВЕДЕТ К СЛЕДУЮЩЕМУ ОБНОВЛЕНИЮ ПРАЙСА уже совершенно на другую дату.
И весь предлагаемый вами гимор повторного прохода ПО ТЕМ ЖЕ ВРЕМЕННЫМ ДАННЫМ, чтобы просто НЕ ПИСАТЬ СИНХРОНИЗАТОРА ФОРМ
в двадцать строчек в NextStep.Invoke ??? Одного-единственного на все приложение???

Модератор:
просьба не выходить за рамки Вашего вопроса и
перестать выдавать рекомендации другим участникам форума о которых они
Вас не просили.
...
Рейтинг: 0 / 0
27.05.2006, 02:37
    #33755709
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
vbnet2000Надо быть просто БЕЗУМНЫМ, чтобы заново дергать сайт поставщика, проводить раззиповку скачанного (довольно долго она происходит),
потом делать еще гору шагов, которые просто НЕЛЬЗЯ сохранить ИЛИ НЕВЕРОЯТНО СЛОЖНО.
К тому же СЛЕДУЮЩИЙ ЗАПУСК ЭТОЙ ЦЕПОЧКИ ПРИВЕДЕТ К СЛЕДУЮЩЕМУ ...

Как-то уж больно нестандартно вы мыслите... Он может быть и хорошо, да только много вам писать придется....
...
Рейтинг: 0 / 0
31.05.2006, 15:58
    #33763800
Абориген
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Неспроста M$ не рекомендует MDI.
...
Рейтинг: 0 / 0
31.05.2006, 22:51
    #33764689
Ц4
Ц4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
Нефиг бизнес логику на визуальных объектах (формах,окнах) реализовывать
Мухи отдельно, котлеты отдельно.

P.S.
Каждый Буратино сам себе Карабас-Барабас
...
Рейтинг: 0 / 0
31.05.2006, 22:59
    #33764697
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
интересно, как правило Кернигана работает на таком жизненном примере.
))
Сергей ФроловСложно сказать что-то кратко по заданному вопросу. Лучше почитать С.Макконнелла "Совершенный код". Там все подробно описано.

Отлаживать код вдвойне сложнее, чем писать. Поэтому, если при написании программы вы используете весь свой интеллект, вы по определению недостаточно умны, чтобы ее отладить. (Brian W. Kernighan)
...
Рейтинг: 0 / 0
02.06.2006, 15:12
    #33769027
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение MDI-приложений
гы, "старательно обходя разложенные грабли, ты теряешь драгоценный ОПЫТ!" (анекдот)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Построение MDI-приложений / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]