我在Visual Studio 2010中有一个表单,它包含一个列表框和多个框架。
框架全部放在彼此之上,框架上方的列表框。我想要完成的过程是,根据您在lisbox中选择的报告,将显示某个帧,并且仅显示该帧。
我有以下代码来完成此任务:
switch (Convert.ToInt32(item.Value))
{
case 11:
fraSelect_2.Hide();
fraSelect_3.Hide();
fraSelect_4.Hide();
fraSelect_1.Visible = true;
iCounter = 1;
break;
case 12:
fraSelect_1.Hide();
fraSelect_3.Hide();
fraSelect_4.Hide();
fraSelect_2.Visible = true;
iCounter = 2;
break;
}
对于每个案例都是如此。我遇到的问题是,如果我正在调用的帧位于不同的帧(不可见)下面,它将不会显示。虽然当我选择与顶层表单相对应的报表时,它会起作用。因此,当我选择report1时,如果report1 = frame1,我可以看到frame1。但是,如果我选择report2,我什么也得不到,因为frame2位于不可见的frame1后面。
如果选择了相应的报告,我怎么能得到frame1后面的帧?
答案 0 :(得分:1)
您是否尝试使用z -order将所需的表单带到前面?
选择第2帧时,它看起来像这样 - 案例11:
case 11:
fraSelect_2.Hide();
fraSelect_3.Hide();
fraSelect_4.Hide();
fraSelect_2.SendToBack();
fraSelect_3.SendToBack();
fraSelect_4.SendToBack();
fraSelect_1.BringToFront();
fraSelect_1.Visible = true;
iCounter = 1;
break;
答案 1 :(得分:1)
在设计模式下,将每个组框放在一个单独的位置,并检查它们是否未包含在另一个组框中。将一个groupbox保留在所需的大小的desidered位置。
然后在表单的Load事件中,将每个groupbox重新定位在用作占位符的位置的相同位置。
fraSelect_2.Location = fraSelect_1.Location;
fraSelect_2.Size = fraSelect_1.Size;
... // move every other groupbox to the same spot....
然后简单地设置Visible = true / false(没有Hide()或BringToFront())应该足以显示正确的。
问题是由于当您将组框放在另一个组框的顶部时,最后一个组成为第一个组的子组,如果顶级组框被隐藏,则其所有子组都将自动隐藏通过Windows,您无法以任何方式使它们可见。