代码之家  ›  专栏  ›  技术社区  ›  tsilb

面板可见=真无效

  •  23
  • tsilb  · 技术社区  · 16 年前

    我正在设置一个面板 visible=true 明确地。调试程序通过该行并 visible 仍计算为 False 在下一行。显然,结果是没有显示面板。这怎么可能?

    pnlValidate.Visible = true;
    if (IsPostBack) return;
    
    <asp:Panel ID="pnlValidate" runat="server">
        <asp:Button cssclass="submit2" ID="btnValidate" runat="server" Visible="false" text="Validate" OnClick="btnValidate_Click" /> <br />
        <asp:TextBox ID="txt6sql" runat="server" Visible="false" TextMode="multiLine" Width="500" Height="200" ReadOnly="true" ToolTip="Report SQL Statement" />
    </asp:Panel>
    

    ASP.NET 2.0,没有其他线程或不稳定的勘误表“应该”和我的成员。

    3 回复  |  直到 9 年前
        1
  •  51
  •   Slauma    16 年前

    您的面板是否嵌套在另一个面板或任何其他类型的容器中,而该容器的Visible设置为false?

    在这种情况下,你观察到的行为是可复制的。如果外部容器不可见,禁止将内部容器的可见性设置为“真”,这是有意义的,因为这意味着内部任何东西都不可见,即使内部面板的空分区也不可见。

    可见属性似乎取决于外部容器的可见性,例如:

    <asp:Panel ID="Panel0" runat="server" Visible="false">
        <asp:Panel ID="Panel1" runat="server" Visible="false">
            Content...
        </asp:Panel>
    </asp:Panel>
    

    此代码与预期一致(先使外部容器可见,然后使内部容器可见):

    Panel0.Visible = true;
    // Now Panel0.Visible returns true and Panel1.Visible returns false
    Panel1.Visible = true;
    // Now Panel0.Visible returns true and Panel1.Visible returns true
    

    此代码有点令人惊讶(首先使内部容器可见,然后使外部容器可见):

    Panel1.Visible = true;
    // Now Panel1.Visible returns false (!, your issue) and Panel0.Visible returns false
    Panel0.Visible = true;
    // Now Panel1.Visible returns true (!!) and Panel0.Visible returns true
    

    设置和获取可见属性似乎是“不对称的”:setter似乎在控件中放置了一个标志,但getter返回一个计算值,该值取决于外部元素的可见性和控件本身的可见性。

    不确定这是否对你有帮助。

        2
  •  0
  •   Matt    16 年前

    默认情况下,面板没有边框。你的面板在那里,你只是看不到它,因为它是空的。设置borderwidth=“1”,您将看到空面板。

        3
  •  0
  •   tsilb    10 年前

    问题解决 :面板在我移除时变为可见 visible="false" 来自子控件。

    推荐文章