Hur gör man för att dölja samtliga Panels på en sida? Du kan väl använda en vanlig javascript funktion, typ: Om du vill göra det på serversidan så gör följande: Nja, jag vill göra det på serversidan. Men det jag söker är en generell funktion som döljer samtliga paneler på sidan. Du kan göra följande: Då får jag felet: Använder du dig av en <asp:Panel> på siten? Ja, Fredrik. Det var vad felet berodde på. Här är lösningen som jag fick till att fungera.Dölja samtliga Panels
Jag vill ha en sub där man skickar med den panel som ska visas och alla andra ska döljas. Hittar ingen lösning som fungerar.
Tack på förhand.Sv: Dölja samtliga Panels
<code>
<script language="javascript">
function handlePanels(showPanelID){
var getPanels = document.getElementsByTagName("DIV");
for(i=0; i<getPanels.length; i++){
if(getPanels[i].id == "showPanelID"){
document.all(getPanels[i].id).style.visibility = "visible";
}else{
document.all(getPanels[i].id).style.visibility = "hidden";
}
}
</script>
</code>
och subben:
<code>
Public Sub HandlePanels(strShowPanelID As String)
Response.Write("<script>handlePanels('" & strShowPanelID & "');</" & "script>")
End Sub
</code>
Med reservation för slarvfel, hoppas du förstår principen.Sv: Dölja samtliga Panels
Sätt Runat="server" på din panel eller panels och unika id:n.
Sedan i din sub skriver du bara id:et på panel och sätter dess visible property till false eller true, beroende på om du ska dölja eller visa.
ex:
<code>
<asp:Panel id="myPanel" runat="server"/>
</code>
Code-behind eller inom script block som är runat server:
<code>
public sub MySub(Control panel)
panel.visible = !panel.visible;
end sub
</code>
/Fredrik NSv: Dölja samtliga Panels
Jag har försökt att loopa genom Page.Controls utan att lyckas, typ:
<code>
dim myControl as Control
for each myControl in Page.Controls
myControl.Visible = false
next
</code>
Då döljer den samtliga kontroller. Jag vill endast komma åt Panel-kontrollerna och sätta visible för respektive till false.
Nån som vet?Sv: Dölja samtliga Panels
<code>
dim myControl as Control
for each myControl in Page.Controls
if myControl is Panel then
myControl.Visible = false
end if
next
</code>
/Fredrik NSv: Dölja samtliga Panels
'Panel' is a type and cannot be used as an expression.
Det verkar som det inte går att få ut paneler genom page.controls. För när jag skriver ut typerna vid varje loop så blir det följande:
ResourceBasedLiteralControl
HtmlForm
LiteralControl
(alltså inte paneler)
Mycket märkligt. Jag är fortsatt tacksam för all hjälp jag kan få.Sv: Dölja samtliga Panels
Tänk på att om du har en controll inom en annan tex:
<code>
<asp:PlaceHolder runat="server">
<asp:Panel runat="server"/>
</asp:PlaceHolder>
</code>
Så via Page.Controls kommer du bara åt PlaceHolder. För att komma åt en kontroll i en kontroll så kan du tex göra något likt detta:
<code>
if Page.HasControls() then
ListControl(Page.Controls)
end if
sub ListControl(ControlCollection myControls)
dim control as Control
for each control in myControls
if control.HasControls() then
ListControl(control.Controls)
end if
Response.Write(control.ToString() & "<br>")
next
end sub
</code>
Detta kanske inte hjälper dig men annars kanske det kommer i använding någon annan gång.
/Fredrik NSv: Dölja samtliga Panels
<code>
Public Sub showPanel(ByVal thePanel As Control)
Dim myForm As ControlCollection = Page.FindControl("Form1").Controls
Dim myControl As Control
For Each myControl In myForm
If myControl.GetType.ToString = "System.Web.UI.WebControls.Panel" Then
myControl.Visible = False
End If
Next
thePanel.Visible = True
End Sub
</code>
Tack för tipsen.