使用框架视图可以看到分层框架

时间:2012-07-25 17:55:20

标签: c# visual-studio-2010

我在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后面的帧?

2 个答案:

答案 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,您无法以任何方式使它们可见。