Показывать ребенка MDI Всегда поверх другого ребенка MDI - PullRequest
1 голос
/ 06 августа 2010

Как мне показать форму MDIChild всегда поверх других форм MDIChild?

Я установил для свойства TopMost ChildForm значение True, но форма все еще ведет себя так же ...

Я попытался установить для свойства TopLevel ChildForm значение True и получил сообщение об ошибке ... «Невозможно изменить стиль верхнего уровня элемента Parented.»

Как мне этого добиться.

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Лучшее решение, не требующее изменения любой другой формы: - объявите новый набор инструментов как элемент управления основного родительского элемента (this):

fForm fFormObj = new fForm();
fFormObj.TopLevel = false;
this.Controls.Add(fFormObj);
fFormObj.Parent = this;
fFormObj.TopMost = true;
fFormObj.Show();
1 голос
/ 06 августа 2010

Фреймворк, по-видимому, не поддерживает дочерние окна MDI, принадлежащие друг другу, поэтому вы должны смоделировать это поведение самостоятельно:

  static Form f1 = new Form();
  static Form f2 = new Form();
  static Form f3 = new Form();

  [STAThread]
  static void Main()
  {
     f1.IsMdiContainer = true;
     f2.MdiParent = f1;
     f3.MdiParent = f1;
     f1.Show();
     f2.Show();
     f3.Show();
     f2.Activated += new EventHandler(f2_Activated);
     Application.Run(f1);
  }

  static void f2_Activated(object sender, EventArgs e)
  {
     f3.Activate();
  }

Обычно я делаю собственные формы, а не дочерние формы MDI. Они не остаются в контейнере MDI, но, по крайней мере, они остаются впереди.

Возможно, причина этого ограничения заключается в странном или неоднозначном желаемом поведении, когда дочерний объект MDI, являющийся владельцем, максимизируется внутри контейнера. Приведенный выше код позволит принадлежащей форме идти за развернутым родительским элементом, если в этом случае нажать на нее. Однако если он находится вне контейнера, он останется видимым.

0 голосов
/ 06 августа 2010

// Edit

Поскольку необходимо сфокусировать только одну из ваших форм MdiChild, попробуйте следующее:

В событии MdiChildActivate перефокусируйте или повторно активируйте требуемое окно в качестве активированного дочернего окна.

Вы также можете использовать событие Deactivated для принудительной перефокусировки соответствующего дочернего окна.

Когда вы создаете форму и показываете ее, вы также добавляете вызов метода focus.

ChildForm.Focus()

Установка фокуса должна сделать его наивысшим.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...