Организация взаимодействия форм

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 10:28

Доброго времени суток!
Начиная с DOS, а потом VB6, привык относиться к формам, как к физическим органам управления компьютером, состояние которых можно легко и логично изменять из любого места программы. Связи между ними устанавливал с помощью Public подпрограмм, функций и переменных. Объектной составляющей и наследования избегал в принципе (и было мне счастье!). До сих пор. При переходе (вынужденном) на VB.net столкнулся с тем, что прежняя логика моя не срабатывает. Снова стал дремучим чайником, а время жестко поджимает. Поэтому прошу помощи.
Портирую большой Windows Form проект из VB6 в VB8. Распечатка программы занимает порядка 300 страниц в Worde.
Ситуация стандартная: есть Главная форма, а также форма1, форма2, форма3 и т.п. Главная форма является стартовой, и должна оставаться визуальным фоном все время работы программы, но она не родительская. Остальные формы время от времени вызываются как модальные, некоторые, напр., форма5, настраивает некоторые свойства и процессы Главной формы и остальных настройки хранятся в глобальных переменных. Словом, все как у людей...
Проблема: шизофреническое поведение форм, вплоть до того, что в процессе прогона программы на каком-то этапе Главная форма скрывается под окном IDE VB8, дочерние формы появляются на фоне редактора кода, а некоторые формы остаются висеть как модальные, несмотря на Me.Close() и Me.Dispose(). К сожалению, у меня нет времени, как встарь, собирать знания по крупицам в учебниках, которые быстро устаревают с выходом новых версий языка. Я знаю, что "глобальная переменная - это плохо", что "форма является экземпляром класса", что "VB.net - это не Basic". Думаю, описанное поведение - результат некорректного кода , созданного Визардом при портировании с VB6. Что исправлять?
Нужно: мне нужна прозрачная схема объявления форм и организации способов их взаимодействия, которая бы гарантировала предсказуемое поведение программы аналогично таковому в VB6. Чтобы установленные из других форм свойства Главной формы самопроизвольно не менялись, чтобы эти свойства были доступны из любого места кода, а при закрытии "дочерних" форм фокус автоматически возвращался к Главной форме. Неужели я прошу невозможного???? Да, и чтобы программа при этом не начинала безбожно тормозить при элементарном вводе текста в текстбокс.

Заранее благодарен.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация взаимодействия форм

Сообщение Хакер » 01.07.2015 (Ср) 10:54

yapetr писал(а):Объектной составляющей и наследования избегал в принципе (и было мне счастье!).


Ну и глупо. Сломай свой мозг, изведи из него прежнюю чушь, начни относиться к формам как к частному случаю классов, перестань думать о взаимодействии с формами, начни думать о взаимодействии с экземплярами форм как о частном случае работы с объектами — экземплярами классов — и будет тебе счастье.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 11:13

Хакер, я попросил конкретной помощи, а не нравоучений. мне нужна прозрачная схема объявления форм и организации способов их взаимодействия, которая бы гарантировала предсказуемое поведение программы аналогично таковому в VB6. Чтобы установленные из других форм свойства Главной формы самопроизвольно не менялись, чтобы эти свойства были доступны из любого места кода, а при закрытии "дочерних" форм фокус автоматически возвращался к Главной форме. Что мне для этого сделать, или где прочесть именно об этом. Книжки этот аспект обходят стороной.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Организация взаимодействия форм

Сообщение Mikle » 01.07.2015 (Ср) 11:56

yapetr писал(а): мне нужна прозрачная схема объявления форм и организации способов их взаимодействия, которая бы гарантировала предсказуемое поведение программы аналогично таковому в VB6.

Для этого есть VB6. Чем он не устроил, если на нём уже есть всё готовое?
Если пишешь на NET, не нужно слепо копировать VB6, полной совместимости нет, и быть не может.
На NET я бы советовал сначала создать проект-шаблон, без лишнего кода "порядка 300 страниц в Worde". Создать в проекте нужные формы и прописать их взаимодействие С НУЛЯ. Когда формы будут нормально взаимодействовать - тогда уже помещать в проект остальной код.
Последний раз редактировалось Mikle 01.07.2015 (Ср) 12:02, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация взаимодействия форм

Сообщение Хакер » 01.07.2015 (Ср) 11:57

yapetr писал(а):Хакер, я попросил конкретной помощи, а не нравоучений.

А получил нравоучения. И получишь.

Если кто-то имеет ошибочное представление о мире, например считает, что земля плоская и стоит на черепахах, но мир не будет адаптироваться к ошибочным представлениям этого человека, как только его представления войдут в противоречия с реальностью — наоборот, это он должен адаптироваться к реальности, и никакой помощи здесь быть не может.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 12:59

Mikle писал(а):Для этого есть VB6. Чем он не устроил, если на нём уже есть всё готовое?

Он меня, Mikle, полностью устраивает. Беда в том, что Windows8 и 10 блокирую регистрацию его рантаймов, компонентов и библиотек при установке. Лавина ошибок при обращению к ядру и пр. Уверения Майкрософт в его поддержке вплоть до 2024 года - туфта рекламная. Многое из того, что прокатывало на ура под XP, на новой платформе умерло. Де факто, они изменили промышленный стандарт, и насильно выдавили с рынка то, что не .NET. VB6, к огромному сожалению, умирает от рук своего создателя. А за, идею, Mikle, спасибо! Еще бы подсказал конкретнее, например, может есть стандартный рецептик? Времени жалко тыкаться вслепую. Ну, как для дремучего чайника?
А, вы, хакер, перестаньте флудить вместо модерации. ИМХО.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация взаимодействия форм

Сообщение Хакер » 01.07.2015 (Ср) 13:03

yapetr писал(а):регистрацию его рантаймов

yapetr писал(а): Лавина ошибок при обращению к ядру и пр

Какая чушь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 13:24

Хакер писал(а):Какая чушь.

Это факты. У меня этих фактов - куча. Из-за этого чуть не сорвалась серьезная работа по сотне организаций. Системные администраторы (где имелись) только руками разводят. Вот поэтому и приходится изучать новый "Бэйсик". И так, и сяк настраивал инсталлятор. И обновления. Процесс инсталляции - ОК, а при запуске программы - ошибка обращения к чему-нибудь там... Смотришь на наличие установленных библиотек - пусто. Но - только на 8 и 10, а также на 7-м SP2.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация взаимодействия форм

Сообщение Хакер » 01.07.2015 (Ср) 13:26

Рантайм не нужно регистрировать.

Ошибок при обращении к ядру быть не может. Иначе это дефективная Windows какая-то. Приведи пример хоть какой-то такой ошибки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Организация взаимодействия форм

Сообщение Mikle » 01.07.2015 (Ср) 14:06

Скорее всего идут ошибки не рантайма, а регистрации компонентов.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 14:10

Мы сейчас не о терминах спорим. Да. Не регятся компоненты на новой платформе, как их не назови. Это проблема системная, и решаю я ее системно. Так поможете, или как?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Организация взаимодействия форм

Сообщение Mikle » 01.07.2015 (Ср) 14:35

А если сделать инсталляшку с помощью "Package & Deployment Wizard", а на целевой системе запускать её из-под администратора (не просто из админской учётки, а именно запуск от имени администратора).

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 16:18

Ох, что только не пробовал. И родной Деплоймент, и Setup Factorry, и сам писал инстоллятор на NSIS. Разные варианты с административным доступом. И комбинировал варианты регистрации и набор регистрируемых компонентов (под NSIS). Дошло до того, что пытался забросить на пользовательскую машину все рантаймы (не только компоненты, требуемые моим кодом). Сделал все мыслимые обновления VB6. Все это катит только под XP и, за некоторым (не выясненным точно) исключением - под 7. Облазил англоязычные сайты. Решение одно: уход с любимой шестерки на геморный .NET.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Организация взаимодействия форм

Сообщение alibek » 01.07.2015 (Ср) 17:15

yapetr писал(а):Разные варианты с административным доступом.

Ключевое тут — запускать приложение посредством контекстного меню "Запуск от имени администратора".
Даже если текущий сеанс — администратора.
Lasciate ogni speranza, voi ch'entrate.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 01.07.2015 (Ср) 17:51

alibek писал(а):Ключевое тут — запускать приложение посредством контекстного меню "Запуск от имени администратора".

Первым делом. И запуск инстолятора. И запуск программы. Не катит.
Но тема-то не про это, господа! Организация взаимодействия форм в VB.NET 2008. Help!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Организация взаимодействия форм

Сообщение Mikle » 01.07.2015 (Ср) 18:23

yapetr писал(а): тема-то не про это, господа!

А по теме ничего конкретного. Точнее есть одно - Me.Close() и Me.Dispose(). Проверил, у меня это срабатывает сразу и так, как положено. Так что это ТЫ должен смоделировать ситуацию, в которой, на твой взгляд, формы ведут себя неверно, написать пример, а мы его разберём.
А на счёт "почитать что-нибудь про взаимодействие форм" - кроме MSDN ничего в голову даже не идёт, оно как-то всё и так понятно, и, вроде бы, работает.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.07.2015 (Ср) 23:28

yapetr писал(а):Организация взаимодействия форм в VB.NET 2008. Help!

С одного устаревшего языка на старую версию другого?
Используй 2012 или хотя бы 2010.

yapetr писал(а):"форма является экземпляром класса"

Является, но с целью совместимости с VB6 есть коллекция My.Application.Forms, из которой доступны инстансы форм.
Не помн уже, что там за магия творится, но идея в том, что она поддерживает один созданный инстанс.
Формы из этой коллекции доступны из кода как глобальные объекты. Но тут всё равно может быть проблема, если у твоей формы есть такой же метод, как у самого класса форм, поэтому имеет смысл обращаться полностью.
А на самом деле, имеет смысл этой фишкой никогда не пользоваться и работать с формами по-человечески.

yapetr писал(а):мне нужна прозрачная схема объявления форм и организации способов их взаимодействия, которая бы гарантировала предсказуемое поведение программы аналогично таковому в VB6

Насколько я понимаю, этим управляет сама система. И если что-то идёт не так, то ты либо сам вмешиваешься в этот процесс и делаешь что-то не то, либо у тебя какие-то странные ожидания.

Mikle писал(а):Так что это ТЫ должен смоделировать ситуацию, в которой, на твой взгляд, формы ведут себя неверно, написать пример, а мы его разберём.

+1

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 04.07.2015 (Сб) 9:02

Qwertiy писал(а):А на самом деле, имеет смысл этой фишкой никогда не пользоваться и работать с формами по-человечески.

Я и пытаюсь отойти от результатов автоматического портирования. Но не методом слепого тыка.
Ответьте, пожалуйста на такие вопросы:
1. Обязательно ли, и как это вяжется с логикой, в Form_Load загружаемой формы объявлять ее как экземпляр самой себя, и еще через New?
2. Если есть множество форм, то нужно ли главную форму объявлять из Sud Main?
3. Обязательно ли при обращении к Public свойству или событию формы из другой формы заново ее объявлять через New? Даже если она уже активирована, но временно лишена фокуса?
С точки зрения VB6 это вопросы бессмысленны. Там все предельно логично и взаимодействие форм прозрачно. В .NET без образцов и готовых шаблонов далеко не продвинешься.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация взаимодействия форм

Сообщение Хакер » 04.07.2015 (Сб) 9:05

Изображение

Выучи наконец суть и смысл вещей, имеющих отношение к ООП.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.07.2015 (Сб) 11:03

1. Наоборот, никогда.
2. Нет.
3. Если форма уже есть, то создавать её не надо.

New создаёт новую форму - очевидно же!
Подозреваю, что после портирования у тебя там вообще не должно быть никаких New.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 06.07.2015 (Пн) 11:49

Qwertiy писал(а):Подозреваю, что после портирования у тебя там вообще не должно быть никаких New.

Да, их нет. Но то, что есть, приводит к непредсказуемому поведению форм. Поэтому я отказываюсь от портирования и буду создавать все с нуля (но после того, как отлажу код до приемлемого состояния). Работы и так навалом, а тут еще и ООП. Мне оно бы и сто лет не нужно.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Организация взаимодействия форм

Сообщение alibek » 06.07.2015 (Пн) 13:15

yapetr писал(а):Мне оно бы и сто лет не нужно.

Разумеется, ООП-подход не единственный, используемый в разработке ПО.
Но выбирать ООП-ориентированный инструмент разработки и использовать не ООП, а например процедурный подход — глупо.
Lasciate ogni speranza, voi ch'entrate.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 06.07.2015 (Пн) 15:18

alibek писал(а):Но выбирать ООП-ориентированный инструмент разработки

Этот выбор вынужденный. От безысходности.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 07.07.2015 (Вт) 13:26

Ура! Проблема с "просадкой" главной формы решилась переключением свойства TopMost в True и разумной манипуляцией этим свойством на других формах. Пока полет нормальный.
НО! При возвращении фокуса Главной форме перестает реагировать на щелчки мыши Меню (MenuStrip) Главной формы. Ну, не понос, так золотуха! Табстопом перевести фокус на него можно, но на Enter и мышь уже не реагирует. При этом нажатие клавиш отлавливает. Очередной капкан...

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 07.07.2015 (Вт) 14:18

Qwertiy писал(а):Используй 2012 или хотя бы 2010.

А 10 встает под XP?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2015 (Вт) 16:07

yapetr писал(а):А 10 встает под XP?

Обе встают - и 2010, и 2012. Хотя, про установку 2012 на XP что-то где-то писали, что надо повозиться. Это про студию.
Сам .net встаёт вообще без проблем, любой.

PS: И не надо сокращать названия до двух цифр - возникает путаница с версиями.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Организация взаимодействия форм

Сообщение Mikle » 07.07.2015 (Вт) 17:00

Qwertiy, я вот тоже пользуюсь VS2008, просто регулярно приходится пользоваться C++, и мне не хочется заниматься танцем с бубнами, чтобы результат работал на XP.
Разве в новых студиях есть что-то такое, что поможет разобраться с данной конкретной задачей, и чего нет в VS2008?

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 07.07.2015 (Вт) 17:46

Qwertiy писал(а):PS: И не надо сокращать названия до двух цифр - возникает путаница с версиями.

Согласен. Прошу прощения.
А про косяки с отказом меню нет идей? Нужно организовать прерывание некоего процесса, запущенного на Главной форме, с помощью Esc. Тут могут быть тонкости, которых я не знаю. Может, все проще, чем я думаю? Нажатие на Esc обрабатывается правильно. Но меню умирает.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2015 (Вт) 19:45

Mikle писал(а):просто регулярно приходится пользоваться C++, и мне не хочется заниматься танцем с бубнами

Они могут стоять одновременно, это вообще не проблема.

Mikle писал(а):Разве в новых студиях есть что-то такое

Там может быть что угодно, вплоть до исправления багов в новых версиях .net'а, как в теме про http-запросы.

yapetr писал(а):А про косяки с отказом меню нет идей?

Пока ты не покажешь какой-нибудь пример, идей не будет.

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Организация взаимодействия форм

Сообщение yapetr » 08.07.2015 (Ср) 8:48

Qwertiy писал(а):Пока ты не покажешь какой-нибудь пример

Я ведь не школьную задачку решаю. Нет времени моделировать косяки, встроенные Майкрософт в свое детище. Меня устроил бы ответ типа: "Такое может быть из-за..."

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList