Переместите 2 windows формы вместе, если вторая форма не свернута - PullRequest
1 голос
/ 28 февраля 2020

Итак, 2 дня go Я спросил, как сдвинуть 2 формы вместе, я получил этот ответ , который действительно помог мне.
Но теперь я хотел бы узнать , как двигаться первая форма, в то время как вторая свернута (поэтому она должна перестать двигаться, пока свернута, или это приведет к взлому sh из второй формы ...) ?
Я попробовал это:

private void MainForm_LocationChanged(object sender, EventArgs e) {
  // All open child forms to be moved
  Form[] formsToAdjust = Application
    .OpenForms
    .OfType<ChildForm>()
    .ToArray();
    FormsToAdjust formsToAdjust1 = new FormsToAdjust(); //added this

  // If the main form has been moved...
if (formsToAdjust1.WindowState != FormWindowState.Minimized) //and this statement as well
{
  if (m_PreviousLocation.X != int.MinValue)
    foreach (var form in formsToAdjust) //... we move all child froms aw well
      form.Location = new Point(
        form.Location.X + Location.X - m_PreviousLocation.X,
        form.Location.Y + Location.Y - m_PreviousLocation.Y
      );

  m_PreviousLocation = Location;
}
}

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

Таким образом, цель 1016 * будет равна , если вторая форма свернута , сохранить возможность перемещать основную форму без изменения местоположения второй.

Любая помощь будет очень полезна, Я продолжу поиск на моей стороне (на самом деле ищет некоторое время), ожидая ответа.

Спасибо:)

1 Ответ

3 голосов
/ 28 февраля 2020

Вы можете добавить фильтр с помощью Where: мы хотим переместить все дочерние формы, которые находятся в Normal (ни Minimized, ни Maximized) состоянии окна

Form[] formsToAdjust = Application
  .OpenForms
  .OfType<ChildForm>()
  .Where(child => child.WindowState == FormWindowState.Normal)
  .ToArray();

тогда все как обычно:

  if (m_PreviousLocation.X != int.MinValue)
    foreach (var form in formsToAdjust) 
      form.Location = new Point(
        form.Location.X + Location.X - m_PreviousLocation.X,
        form.Location.Y + Location.Y - m_PreviousLocation.Y
      );

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