Проектирование в VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Проектирование в VB

Сообщение Leon_ » 05.08.2004 (Чт) 8:41

Цель следующая -- имеются 2 формы одного приложения (frmTask и frmJob), запущенные одновременно. Они должны изменять общую для них Структуру данных (некоторый динамический массив, хотя и это обсуждается). Все это осуществляется пользователем, поэтому нет одновременной работы обеих форм и проблем с нарушениями доступа к Структуре не возникнет.

А проблема в том, как бы правильно разместить эту Структуру, чтобы она была доступна функциям обеих форм? В модуле одной из форм? В модуле отдельного класса? В каком-н внешнем файле? Посоветуйте, что выбрать (только что-н попроще, не очень экзотичное :wink: )

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 05.08.2004 (Чт) 10:30

Если тебе надо иметь общую структуру (одиннаковые данные), тогда в одной из форм, а если просто структуру - тогда класс.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.08.2004 (Чт) 11:52

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

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 05.08.2004 (Чт) 14:05

tyomitch писал(а):Я бы в отдельном модуле сделал, чтоб после выгрузки одной из форм, другая не потеряла связь с структурой.

Это правильно. Но у него 2 формы работают вместе. Я так понял, что одно без другой не работают. Если так, то конечно лучше в модуле

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 05.08.2004 (Чт) 14:13

Да, 2 формы работают вместе, совместно (но по очереди) изменяют Структуру. Я видимо, так и сделаю -- размещу в модуле формы.

Просто я ожидал каких-то новых для меня решений, поднабраться чужого опыта :lol: Если кто как-то по другому решает проблему межформенного взаимодействия, обмена данными и т.д. -- поделитесь! Это будет интересно всем :)

DmitriyIT
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 01.08.2004 (Вс) 13:16

Сообщение DmitriyIT » 05.08.2004 (Чт) 14:18

По моему мнению наиболее быстродействующим и эффективным решением было бы создание буфера средствами WinAPI(GlobalAlloc, GlobalLock, agCopyData). Тогда к структуре можно обращаться из любого компонента и даже из других приложений + нет тормозов и утечек памяти, которые любит компилятор VB. Но это если динамическая структура большая, иначе намного проще объявить структуру в классе(но тормозить все равно может даже при малых размерах...).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.08.2004 (Чт) 15:04

DmitriyIT писал(а):По моему мнению наиболее быстродействующим и эффективным решением было бы создание буфера средствами WinAPI(GlobalAlloc, GlobalLock, agCopyData). Тогда к структуре можно обращаться из любого компонента и даже из других приложений + нет тормозов и утечек памяти, которые любит компилятор VB. Но это если динамическая структура большая, иначе намного проще объявить структуру в классе(но тормозить все равно может даже при малых размерах...).

Ну это ты сильно загнул... Времена Win16 давно ушли.

А никаких "тормозов и утечек памяти" в компиляторе VB нету, есть кривые руки программистов.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 05.08.2004 (Чт) 15:31

Меня, например, так учили в Италии: перед выгрузой 1 формы, просто прячешь её и "достаешь" значения переменных. Потом закрываешь её и открываешь 2.

По сути это уже элементы ООП.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 17.08.2004 (Вт) 1:24

Сразу предупреждаю, я пишу так как можно а не как лучше (каков вопрос:) )

Вообще-то строго говоря модуль - самый простой и эффективный вариант. Следовательно всё остальное - это варианты усложнения, а их может быть много:

0.(доступность)
Модуль приложения
1.(муторная защита)
Ты можешь писать динамическую структуры в файл (я бы так делать не стал), кроме огромных тормозов ты можешь получить доступ к данным, и возможность сохранять их при аварийном сбое системы.
2.(доступ + муторная защита)
Создай компонент COM DLL, который включает в себя процедуры подобные модулю в обычном приложении, НО .. добавь туды код, которым б компонент сам писал ЛОГ:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 17.08.2004 (Вт) 7:53

Спасибо за отклик.
(Правда, поздновато, конечно -- та связка уже сдана и неделя как уже работает. Обьявил массив и флаг в модуле одной из форм "private" и пара функций Get/Set)
Но если кто поделится своим практическим опытом решения таких и подобных задач -- милости прошу в тему. Мало ли что может пригодиться мне завтра :D

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 17.08.2004 (Вт) 11:34

Как организовать, еще во многом зависит от логики приложения. Если эта структура логически относится к одной из форм, то там держать ее и надо.

Если же это независимая структура, то на мой взгляд ее нужно оформить как отдельный класс. Почему не просто как глобальную переменную в каком-нибудь модуле? Потому что структура сложная (тем болле, что тебе еще и флаг к ней понадобился дополнительный). Определить методы работы с ней... Особенно, если похоже на то, что структура будет в дальнейшем развиваться. Объектной переменной этого класса инициализировать обе формы, которые и будут с ней работать.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 5

    TopList  
cron