Как узнать в MDI родителе о закрытии MDI child'a????
От: _russish  
Дата: 30.10.05 19:02
Оценка:
Господа, ни как не могу понять, как узнать в MDI родителе, что его MDI child закрылся, ПРИ ЭТОМ НЕ ВЫПОЛНЯЯ НИКАКИХ ДЕЙСТВИЙ В CHILD'Е. Есть такое событие MdiChildActivate, но оно возникает и когда child активируется. Попробовад поиграть в MdiChildActivate со свойством child'a Visible, свойством MDIChildren родителя, но безуспешно.
Необходимость вот в чем: при нажатии на ToolBarButton создается MDIChild, эта кнопка Enable = false, а при закрытии этого child'a соответствующая кнопаке Enable = true.
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 30.10.05 21:53
Оценка:
Ну во-первых можно при создании (а это делается в родителе) вешать Event на закрытие.
А во-вторых, нет ничего плохого если что то выполнять в child-e, хотя событее наверное больше подходит.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 10:53
Оценка:
[нет ничего плохого если что то выполнять в child-e]
Просто я пишу оболочку для подключения форм из плагинов, которые будут разрабатывать разные люди. Не хотелось бы в требованиях указывать такие вещи или нагружать разработчиков ненужным наследованием.
Насчет Event надо попробовать. Но я на самом деле удивлен, что такое напрямую не предусмотрено. THKS.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 12:36
Оценка:
>Господа, ни как не могу понять, как узнать в MDI родителе, что его MDI child закрылся, ПРИ ЭТОМ НЕ ВЫПОЛНЯЯ НИКАКИХ ДЕЙСТВИЙ В CHILD'Е.

WM_MDIDESTROY Message

"An application sends the WM_MDIDESTROY message to a multiple-document interface (MDI) client window to close an MDI child window."

Как найти MdiClient показано в Как отловить клики мышью на MDI контейнере? Подписка на событие Click у формы с выставленным в true свойcтвом IsMdiContainer ничего не дала.

Как перехватывать сообщения см. Как можно перехватить Windows сообщения (WM_X), посылаемые в оконную процедуру controla?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 16:47
Оценка:
to SergeyP: Почему-то не смог извлечь толк от использования WM_MDIDESTROY. Более того, Spy++ его тоже не ловит...

to _russish: При создании формы из сборки подписывайся у вновь созданного экземпляра на событие Closed (как уже и говорилось) — это простое решение твоих проблем.
Offline сборники часто задаваемых вопросов:
[[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229103.aspx]Все[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229987.aspx]Windows Forms[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229984.aspx]Common[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229983.aspx]ASP.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229982.aspx]ADO.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229985.aspx]UG[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229986.aspx]WSS[/url]]


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 17:14
Оценка:
>Более того, Spy++ его тоже не ловит

Перед тем как написать то сообщение я проверил при помощи Spy++, сообщение есть.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 18:21
Оценка:
to SergeyP: Скорее всего я что-то делаю неправильно. Не могли бы Вы запостить пример кода?
Offline сборники часто задаваемых вопросов:
[[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229103.aspx]Все[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229987.aspx]Windows Forms[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229984.aspx]Common[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229983.aspx]ASP.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229982.aspx]ADO.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229985.aspx]UG[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229986.aspx]WSS[/url]]


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 18:35
Оценка:
Господа. Вот код простого решения может кому понадобится. Всем спасибо.
...
{
Form m = new Form();
m.Closed += new EventHandler(MdiChild_Closed);
}

private void MdiChild_Closed(object sender, EventArgs e)
{
DoSomething(sender);
}



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 31.10.05 18:42
Оценка:
>>Вот код простого решения может кому понадобится.

Собственно говоря, это и имел ввиду daner.

>>Всем спасибо.


Тебе спасибо. Сейчас будем разбираться, где это сообщение тонет и в какую сторону вообще идет
Offline сборники часто задаваемых вопросов:
[[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229103.aspx]Все[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229987.aspx]Windows Forms[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229984.aspx]Common[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229983.aspx]ASP.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229982.aspx]ADO.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229985.aspx]UG[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229986.aspx]WSS[/url]]


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 01.11.05 07:10
Оценка:
>Не могли бы Вы запостить пример кода?
using System;
using System.Windows.Forms;
class DemoForm: Form
{
 NativeWindowEx native;
 public DemoForm()
 {
  IsMdiContainer = true;
  native = new NativeWindowEx(Controls[0]);
  native.MdiDestroy += new EventHandler(native_MdiDestroy);
  Form form = new Form();
  form.MdiParent = this;
  form.Show();
 }
 static void Main()
 {
  Application.Run(new DemoForm());
 }
 private void native_MdiDestroy(object sender, EventArgs e)
 {
  MessageBox.Show("WM_MDIDESTROY");
 }
}
class NativeWindowEx: NativeWindow
{
 const int WM_MDIDESTROY = 0x0221;
 public event EventHandler MdiDestroy;
 public NativeWindowEx(Control control)
 {
  if (control.IsHandleCreated)
   AssignHandle(control.Handle);
  else
   control.HandleCreated += new EventHandler(control_HandleCreated);
  control.HandleDestroyed += new EventHandler(control_HandleDestroyed);
 }
 private void control_HandleCreated(object sender, EventArgs e)
 {
  AssignHandle((sender as Control).Handle);
 }
 private void control_HandleDestroyed(object sender, EventArgs e)
 {
  DestroyHandle();
 }
 protected override void WndProc(ref Message m)
 {
  if (m.Msg == WM_MDIDESTROY && MdiDestroy != null)
  {
   base.WndProc (ref m);
   MdiDestroy(this, EventArgs.Empty);
   return;
  }
  base.WndProc (ref m);
  
 }
}




данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 01.11.05 08:34
Оценка:
Вижу, работает. Но, Сергей, стоит ли так изголяться ради того, чтобы получить эффект, сравнимый с 1 строчкой кода?
Offline сборники часто задаваемых вопросов:
[[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229103.aspx]Все[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229987.aspx]Windows Forms[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229984.aspx]Common[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229983.aspx]ASP.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229982.aspx]ADO.NET[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229985.aspx]UG[/url]] [[url=http://www.gotdotnet.ru/DotNet/FAQ/OfflineFAQ/229986.aspx]WSS[/url]]


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 01.11.05 08:42
Оценка:
Мой пример — это просто буквальный ответ на вопрос:

"как узнать в MDI родителе, что его MDI child закрылся, ПРИ ЭТОМ НЕ ВЫПОЛНЯЯ НИКАКИХ ДЕЙСТВИЙ В CHILD'Е."

В данном примере АБСОЛЮТНО никаких действий с mdi child'ами не производится.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как узнать в MDI родителе о закрытии MDI child'a????
От: Аноним  
Дата: 27.12.06 11:20
Оценка:
А как повесить обработчик события нажатия кнопки в дочернем окне, родителю? и вообще както можно обратиться к родительским свойствам и методам с дочернего?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.