Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как в с# сделать многодокументный (MDI) проект. / 20 сообщений из 20, страница 1 из 1
09.01.2003, 17:35
    #32088417
smeh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
САБЖ?
...
Рейтинг: 0 / 0
09.01.2003, 17:45
    #32088427
smeh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Спасибо нашел

а как мне внутри моего MDI окна открыть форму, которая находится в dll?

я открываю, а у меня получается еще одно приложение.
...
Рейтинг: 0 / 0
09.01.2003, 17:48
    #32088428
smeh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Опять таки огромное спасибо за беспокойство,
оказалось все просто
А то я тут парюсь уже 10 минут

Вопросы сняты.
...
Рейтинг: 0 / 0
10.01.2003, 13:38
    #32088784
SilencerID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Молодец, что нашел, плохо, что другим не объяснил :)

Тем, кому может понадобиться:
(1)

private void mnuFileNew_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Form fCld = new frmChild();
fCld.MdiParent = this;
fCld.Show ();
}
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.05.2004, 18:15
    #32535346
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
вот попробовал поиграться с
this.IsMdiContainer:

грузим основную форму (this.IsMdiContainer = True)
грузим дочернюю.

потом по кнопке в основной делаем this.IsMdiContainer = False

дочерняя пропадает. при этом больше никакие ее события не срабатывают.
Ошибок тоже не выскакивает никаких.
основная при этом фунциклирует нормально.
интересно-бы узнать дальнейшую судьбу дочерней формы?
я понимаю, что ситуация надумана, но такие ситуации сильно помогают в понимании внутренних процессов при изучении нового.
...
Рейтинг: 0 / 0
26.05.2004, 19:53
    #32535515
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
При this.IsMdiContainer = False коллекция MdiChildren главной формы "уничтожается", следовательно и все child-формы.

Так что child форм просто нет.

P.S. Не советую так шутить в своих приложениях :-)
...
Рейтинг: 0 / 0
26.05.2004, 20:14
    #32535528
Sid Vishez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
А не подскажите как компонент, который находится в родительской форме, использовать в дочерней. Я думю, что можно использовать один объект sqlconnection на все приложение...
...
Рейтинг: 0 / 0
26.05.2004, 20:36
    #32535542
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>А не подскажите как компонент, который находится в родительской форме, использовать в дочерней. Я думю, что можно использовать один объект sqlconnection на все приложение...

В приложениях MDI из Mdichild добраться до "главного окна" можна через ParentForm.

Только для ADO.NET совсем не критично несколько Connection.
Создавайте его там где надо. Открывайте соединение с базой данных как можно позже закрывайте как можно раньше.
...
Рейтинг: 0 / 0
26.05.2004, 20:43
    #32535550
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>Только для ADO.NET совсем не критично несколько Connection.

Неправильно выразился. Для ADO.NET нет необходимости, и нет аналога Delphiского DataModule. Создавать экземпляр класс Connection можно в любом месте, где угодно и столько раз сколько нужно при этом производительность достаточно высока.


Думаю вам следует поближе познакомиться с технологией ADO.NET и вы поймете почему это все и как.
...
Рейтинг: 0 / 0
26.05.2004, 21:59
    #32535606
Sid Vishez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Ну а с точки зрения удобства... если форм много, а соединение изменилось... чтобы не менять на всех формах...
И еще - правильно ли я понял - sqlconnection`ов, dataadapter`ов должно быть много... а dataset`ов - один на каждую форму???
...
Рейтинг: 0 / 0
27.05.2004, 07:38
    #32535783
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>Ну а с точки зрения удобства... если форм много, а соединение изменилось...

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

>И еще - правильно ли я понял - sqlconnection`ов, dataadapter`ов должно быть много... а dataset`ов - один на каждую форму???

Всего по возможности должно быть мало :-). А dataSet вообще может быть один.
На самом деле очень распространненая практика, когда все функции работы с данными выносятся в отдельный модуль. Конечно мастера в Visual Studio .NET такое делать не могут. Вот и получается в основном что на каждой форме есть и несколько DataAdapter и Connection, а также DataSet.

Не знаю как остальные, но я лично никогда не оставляю соединение открытым (Open). Когда приходит необходимость обработки данных - просто создаю экземпляр класса Connection - открываю со своей строкой подключенияя- произвожу необходимые действия, и сразу же его закрываю. При этом руководствуюсь лозунгом: "Позже открыл - раньше закрыл". Поэтому и надобности в единном Connection нет, единственное(но необязательно) строка подключение - должна быть одна и быть общедоступной.

Я думаю все таки вам следует почитать что нибудь про "философию" ADO.NET и многие вещи тогда станут понятны.

Что главное- так это ADO и ADO.NET совершенно разные вещи, и техника работы с ADO не подходит (да и в основном не реализована) в ADO.NET.
...
Рейтинг: 0 / 0
27.05.2004, 11:04
    #32536142
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
При this.IsMdiContainer = False коллекция MdiChildren главной формы "уничтожается", следовательно и все child-формы.

Так что child форм просто нет.
стоп-стоп.
есть объект. у него есть время жизни. жизнь объекта делится на две части: нормальная - пока к объекту можно добраться по ссылкам, и "загробная" - пока сборщик мусора не уберет этот объект после того, как объект стал недостижимым по ссылкам.

Подтверждает ли мой "эксперимент" утверждение, что в "загробной жизни" события объекта не отрабатывают?

если да, то получается, что смысла в событиях почти нет - я всегда должен их инициировать явно? В вышеуказанном случае - писать свою обработку изменения значения this.IsMdiContainer в которой пробегаться по всем чилдам и закрывать их. Но мне всегда казалось, что события для того и нужны, чтобы обрабатывать вот такие случаи и освободить меня от этой рутинной работы.

или я чего-то не понимаю?


P.S. Не советую так шутить в своих приложениях :-)

для того и "балуюсь", чтобы потом нечаянно не пошутить :-)
...
Рейтинг: 0 / 0
27.05.2004, 11:26
    #32536202
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>если да, то получается, что смысла в событиях почти нет - я всегда должен их инициировать явно? В вышеуказанном случае - писать свою обработку изменения значения this.IsMdiContainer в которой пробегаться по всем чилдам и закрывать их. Но мне всегда казалось, что события для того и нужны, чтобы обрабатывать вот такие случаи и освободить меня от этой рутинной работы.

Что то я не понимаю в чем проблема. Мне кажется большинство ситуаций надо предотвращать а не отлавливать. Здесь вывод напрашивается один это свойство не используется для корректного закрытия child-окон.
...
Рейтинг: 0 / 0
27.05.2004, 14:52
    #32536878
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Здесь вывод напрашивается один это свойство не используется для корректного закрытия child-окон.

Плохо. Тоесть мне теперь надо найти ВСЕ варианты, которые могут привести к некорректному закрытию формы?
мне всегда казалось, что форма сама о себе должна заботиться - достаточно в ОДНОМ месте написать правильный код ее закрытия, и все - среда выполнения должна обеспечить обработку события за исключением ситуаций, когда сама среда не "вылетела" по какому-то ексепшину...
...
Рейтинг: 0 / 0
27.05.2004, 15:01
    #32536894
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
Ну что то еще найдете пишите, интересно.

Бред конечно но вполне возможно в следующей версии FrameWork будет срабатывать Closing у child-from в этой ситуации.
...
Рейтинг: 0 / 0
27.05.2004, 15:56
    #32537043
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
дело в том, что я только начинаю изучать технололию NET и мне хотелось просто узнать - описанная мной ситуация - это норма и это я чего-то не понимаю, или я понимаю все правильнро, а эта ситуация - исключение.
Вот в чем вопрос :-)
...
Рейтинг: 0 / 0
03.06.2004, 01:22
    #32545645
Sid Vishez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>Когда приходит необходимость обработки данных - просто создаю экземпляр класса Connection - открываю со своей строкой подключенияя- произвожу необходимые действия, и сразу же его закрываю.

А можно ли сделать так: создать экземпляр класса Connection в главной форме, а открывать и закрывать его уже по мере надобности в остальных.
Я не могу понять как прописывать этот экземпляр в компонентах на других формах. Например, я объявляю этот Connection в классе главной формы Form1. Указываю в обработчике события этой формы Load строку соединения с БД. Открываю другую форму на которой находится DataAdapter. Ему в качестве параметра надо указать экземпляр класса Connection. Но в визуальном редакторе его свойств видно только Connection`ы, котрые находятся на форме DataAdaptera.
У меня книга по программированию БД на VB.Net. Там автор пишет, что мол объявляем один коннекшн, создаем его и пользуем во все программе.
...
Рейтинг: 0 / 0
03.06.2004, 07:43
    #32545741
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
>А можно ли сделать так: создать экземпляр класса Connection в главной форме, а открывать и закрывать его уже по мере надобности в остальных.
Я не могу понять как прописывать этот экземпляр в компонентах на других формах. Например, я объявляю этот Connection в классе главной формы Form1. Указываю в обработчике события этой формы Load строку соединения с БД. Открываю другую форму на которой находится DataAdapter. Ему в качестве параметра надо указать экземпляр класса Connection. Но в визуальном редакторе его свойств видно только Connection`ы, котрые находятся на форме DataAdaptera.
У меня книга по программированию БД на VB.Net. Там автор пишет, что мол объявляем один коннекшн, создаем его и пользуем во все программе.


Измените "видимость" у своего Connection с private, например на internal (видимость на сборку). Объект Connection будет доступен из кода.

Теперь design. Очень много пошло вопросов по этой теме. Опишу один из способов как делается один Connection на все приложение. При этом все что касается доступа к БД тоже будет находиться в одном месте.

1) Создаете Component назовем его например DataManager.
2) На этот component "накидываем" DataAdapterы, Connection. При этом полностью используются различные мастера по генерации процедуры, SQL запросов и т.д.
3) В главной формы создаем объект нашего DataManager, устанавливаем его видимость, например в internal.
4) Нигде больше не создаем экземпляров класса DataAdapter а используем из нашего компонента DataManager.
5) В нашем компоненте можем создать различные процедуры. Из названия станет понятно их назначение.

FillMyDataSet(DataSet ds);
UpdateMyDataSet(DataSet ds);

6) Получаем аналог DataModule в Delphi. К которому мы можем обратиться в любой момент через главную форму и передать например свой DataSet для Fill, Update and etc.

Пример:
Код: plaintext
1.
mainForm.myDataManager.FillMyDataSet(this.m_dataSet);
...
Рейтинг: 0 / 0
20.10.2004, 20:56
    #32747364
ьшл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
народ !
так я и не понял как правильно закрыть форму.
есть парент и в ней открываются два чилд.а.
должно быть так: открываю один чилд, потом открываю второй при этом первый закрывается?
...
Рейтинг: 0 / 0
21.10.2004, 09:18
    #32747629
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в с# сделать многодокументный (MDI) проект.
ьшл
должно быть так: открываю один чилд, потом открываю второй при этом первый закрывается?
И зачем тебе тогда MDI ??
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как в с# сделать многодокументный (MDI) проект. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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