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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

А можно ли сделать так: создать экземпляр класса Connection в главной форме, а открывать и закрывать его уже по мере надобности в остальных.
Я не могу понять как прописывать этот экземпляр в компонентах на других формах. Например, я объявляю этот Connection в классе главной формы Form1. Указываю в обработчике события этой формы Load строку соединения с БД. Открываю другую форму на которой находится DataAdapter. Ему в качестве параметра надо указать экземпляр класса Connection. Но в визуальном редакторе его свойств видно только Connection`ы, котрые находятся на форме DataAdaptera.
У меня книга по программированию БД на VB.Net. Там автор пишет, что мол объявляем один коннекшн, создаем его и пользуем во все программе.
...
Рейтинг: 0 / 0
Как в с# сделать многодокументный (MDI) проект.
    #32545741
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А можно ли сделать так: создать экземпляр класса 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
Как в с# сделать многодокументный (MDI) проект.
    #32747364
ьшл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ !
так я и не понял как правильно закрыть форму.
есть парент и в ней открываются два чилд.а.
должно быть так: открываю один чилд, потом открываю второй при этом первый закрывается?
...
Рейтинг: 0 / 0
Как в с# сделать многодокументный (MDI) проект.
    #32747629
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ьшл
должно быть так: открываю один чилд, потом открываю второй при этом первый закрывается?
И зачем тебе тогда MDI ??
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как в с# сделать многодокументный (MDI) проект.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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