web-dev-qa-db-ja.com

Panel visible = trueは効果がない

設定しているパネルがあります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。他のスレッドや、メンバーを混乱させるはずのない不安定なエラッタはありません。

24
tsilb

パネルは、Visibleがfalseに設定されている別のパネルまたは他のタイプのコンテナー内にネストされていますか?

このような状況では、観察した動作は再現可能です。外側のコンテナーが非表示の場合、内側のコンテナーの可視性をtrueに設定することを禁止することは意味があります。これは、内側のパネルの空のdivであっても、内側に何も表示されていない必要があることを意味します。

Visibleプロパティは、外部コンテナの可視性に依存しているようです。たとえば、次のようになります。

<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

Visibleプロパティの設定と取得は「非対称」のようです。Setterはコントロールにフラグを配置するようですが、Getterは外部要素の可視性とコントロール自体の可視性に依存する計算値を返します。

これがまったく役立つかどうかはわかりません。

52
Slauma

デフォルトでは、パネルには境界線がありません。あなたのパネルは空です。 borderwidth = "1"を設定すると、空のパネルが表示されます。

1
Matt

問題解決:削除するとパネルが表示されましたvisible="false"子コントロールから。

0
tsilb