1

我在 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;

}

依此类推。我遇到的问题是,如果我正在调用的框架位于不同的框架下方(不可见),它将不会显示。虽然当我选择与顶部表单相对应的报告时,它会起作用。因此,如果当我选择报告 1 时报告 1 = 框架 1,我可以看到框架 1。但是如果我选择report2 我什么也得不到,因为frame2 在一个不可见的frame1 后面。

一旦选择了相应的报告,关于如何让 frame1 后面的帧显示的任何想法?

4

2 回答 2

1

您是否尝试过使用 z -order 将所需的表格放在前面?

S0 选择 frame2 时,它看起来像这样 - 案例 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;
于 2012-07-25T17:58:25.157 回答
1

在设计模式下,将每个组框放在一个单独的位置,并检查它们是否不包含在另一个组框中。将一个分组框保留在所需大小的所需位置。

然后在表单的 Load 事件中,将每个组框重新定位在用作占位符的位置的相同位置。

   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())就足以显示正确的。

问题是由于当您将 groupbox 放在另一个 groupbox 的顶部时,最后一个 groupbox 成为第一个 groupbox 的孩子,如果顶级 group box 被隐藏,那么它的所有孩子都会被 Windows 自动隐藏,并且你不能以任何方式使它们可见。

于 2012-07-25T17:58:58.950 回答