【问题标题】:Making a layered frame visible with Frame View使用 Frame View 使分层框架可见
【发布时间】:2012-07-25 17:55:19
【问题描述】:

我在 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 后面的框架吗?

【问题讨论】:

    标签: c# visual-studio-2010


    【解决方案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())应该足以显示正确的。

    问题是由于当您将分组框放在另一个分组框的顶部时,最后一个分组框成为第一个分组框的子级,如果顶级分组框被隐藏,那么它的所有子级都将自动隐藏通过 Windows,您无法以任何方式使它们可见。

    【讨论】:

    • 不幸的是,这也行不通。我仍然只能让顶部框架可见。我也尝试过使用“fraSelect2.Visible = false;”对于我没有选择但无济于事的所有其他框架。
    • 当您谈到框架时,您指的是哪种特定的控件类型? (GroupBox、Panel 还是??)
    • 它是一个包含报告名称的列表框,根据我使用的报告名称,我选择了哪个框架。
    • 你有没有把'框架'(我还是不明白这个框架是什么类型的控件)放在一个里面?如果每个控件都在另一个控件中,我已经重现了您的问题。
    • 这些框架是 GroupBoxes (抱歉不知道你在上一条评论中提到了那些)。到目前为止,它们只是简单地拖放到彼此之上,因此它们出现在同一个位置而不是分散。您能否通过将控件相互放在一起来更深入地说明您的意思?
    【解决方案2】:

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

    选择 frame2 时的 S0 看起来像这样- 案例 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;
    

    【讨论】:

    • 不幸的是,这也行不通。我仍然只能让顶部框架可见。当我选择不同的框架时它是空白的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多