【发布时间】:2012-07-18 17:21:50
【问题描述】:
我创建了一个非常复杂的 Windows 窗体应用程序。我现在要做的是,如果单击不同的按钮以禁用某些面板,但将其下方的所有其他面板向上移动,使其看起来井井有条。我很难受。我想开发一个函数,它传入一个被禁用的面板以及它下面的所有其他面板的列表,并使用递归重新排列所有面板。此功能有效,但它没有考虑一个面板的高度是否大于另一个面板的高度,它会在两个面板之间留下额外的空间。任何帮助将非常感激。
Public Sub whatever(ByVal panel As Panel, ByVal list As List(Of Panel))
Dim temppanel As Panel = New Panel()
For Each item As Panel In list
temppanel.Location = New Point(temppanel.Location.X, item.Location.Y)
item.Location = New Point(item.Location.X, panel.Location.Y)
list.Remove(item)
whatever(temppanel, list)
If list.Count = 0 Then
Exit For
End If
Next
End Sub
图片
【问题讨论】:
-
屏幕截图可能有助于解释这里发生了什么。关于初始化该列表,您如何首先调用此
whatever函数? -
每当单击特定按钮时都会调用“whatever”函数。基于一个按钮,我知道不再显示哪个面板。我然后循环并找到面板下不再显示的所有面板,然后将所有这些面板存储到一个列表中,然后我调用任何具有不再显示的面板的函数以及所有其他面板的列表需要移动的面板。我希望这回答了你的问题。
-
当您说“下方”时,您是指在 z 顺序中的下方,还是位于屏幕上垂直“下方”位置的下方?此外,如果您所做的只是从中获取位置,请不要将 Panel 传递给您的函数,而是传递一个 Point(或 Rectangle,如果您需要所有坐标)。
-
对不起,我的意思是屏幕上的垂直较低位置。
-
@tcarvin 因为我使用递归来执行此操作,所以我通过前一个面板来获取坐标。我真的不知道这样做的最佳方法是什么,任何帮助将不胜感激。