Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将两个windows窗体一起移动,除非第二个窗体最小化_C#_Winforms - Fatal编程技术网

C# 将两个windows窗体一起移动,除非第二个窗体最小化

C# 将两个windows窗体一起移动,除非第二个窗体最小化,c#,winforms,C#,Winforms,所以两天前我问过如何将两张表格移动到一起,我知道这对我很有帮助。但是现在我想知道如何移动第一个表单,而第二个表单是最小化的,所以它必须在最小化时停止移动,否则它将导致第二个表单崩溃。。。? 我试过这个: 但它不能工作,因为每次主窗体移动时它都会打开第二个窗体是的,这是一个愚蠢的尝试,但我真的无法解决这个问题。。。 因此,我们的目标是,如果第二个表单最小化,保持能够移动主表单,而不改变第二个表单的位置。 非常感谢您的帮助,我将继续在我身边搜索,在等待答复的同时实际搜索一段时间。谢谢:您可以添加一个

所以两天前我问过如何将两张表格移动到一起,我知道这对我很有帮助。但是现在我想知道如何移动第一个表单,而第二个表单是最小化的,所以它必须在最小化时停止移动,否则它将导致第二个表单崩溃。。。? 我试过这个:

但它不能工作,因为每次主窗体移动时它都会打开第二个窗体是的,这是一个愚蠢的尝试,但我真的无法解决这个问题。。。 因此,我们的目标是,如果第二个表单最小化,保持能够移动主表单,而不改变第二个表单的位置。 非常感谢您的帮助,我将继续在我身边搜索,在等待答复的同时实际搜索一段时间。谢谢:

您可以添加一个过滤器,并提供以下帮助:我们希望移动所有处于正常窗口状态的子窗体,既不处于最小化状态,也不处于最大化状态

Form[] formsToAdjust = Application
  .OpenForms
  .OfType<ChildForm>()
  .Where(child => child.WindowState == FormWindowState.Normal)
  .ToArray();
您可以在Where的帮助下添加一个过滤器:我们希望移动所有处于正常窗口状态(既不是最小化窗口状态,也不是最大化窗口状态)的子窗体

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

为什么不检查子窗体是否最小化?如果是,请离开它!如果form.WindowState==FormWindowState.Normal form.Location=…这并不是这个东西的工作原理。子窗体应订阅所有者窗体调整大小和移动事件,并在尝试移动前检查其WindowsState是否为FormWindowsState.Normal。还要检查所有者窗体的FormWindowsState.Maximized,并相应地重新定位,可能在所有者边界内。您应该使用.Showthis显示子窗体,因此所有者的FormWindowsState.Minimized是不相关的,因为当所有者最小化时,子窗体也将最小化。或者使用类似的方法。为什么不检查子窗体是否最小化?如果是,请离开它!如果form.WindowState==FormWindowState.Normal form.Location=…这并不是这个东西的工作原理。子窗体应订阅所有者窗体调整大小和移动事件,并在尝试移动前检查其WindowsState是否为FormWindowsState.Normal。还要检查所有者窗体的FormWindowsState.Maximized,并相应地重新定位,可能在所有者边界内。您应该使用.Showthis显示子窗体,因此所有者的FormWindowsState.Minimized是不相关的,因为当所有者最小化时,子窗体也将最小化。或者使用类似。根据显示窗体之前的备注,无论初始设置如何,WindowsState属性始终设置为FormWindowsState.Normal。这反映在“高度”、“左侧”、“顶部”和“宽度”特性设置中。如果窗体在显示后被隐藏,则这些属性将反映以前的状态,直到再次显示该窗体为止,而不考虑对WindowsState属性所做的任何更改。检查是否最小化不是更好吗?@Kaj:因为我们得到Application.OpenForms,所以当表单未显示时,我们不会移动它们。我错过了:对不起,根据表单显示前的备注,WindowState属性始终设置为FormWindowState.Normal,而不管其初始设置如何。这反映在“高度”、“左侧”、“顶部”和“宽度”特性设置中。如果窗体在显示后被隐藏,则这些属性将反映以前的状态,直到再次显示该窗体为止,而不考虑对WindowsState属性所做的任何更改。检查是否最小化不是更好吗?@Kaj:因为我们得到Application.OpenForms,所以当表单未显示时,我们不会移动它们。我错过了:对不起
  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;