webForumDet fria alternativet

Hjälp med meny

.NET

18 svar · 327 visningar · startad av andreas_lindh

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Jag har en meny som ser ut som den bifogade bilden.

När man är inne på Information blir bilden vit. Nu gör jag detta "för hand" på varje sida.

Någon som har en ide om hur man skulle kunna lösa det här med en funktion ?

meny.gif
Medlem sedan dec. 19996 522 inlägg
#2

dthml ? eller sätta css dynamiskt på kontrollen?

Medlem sedan jan. 20011 140 inlägg
#3

först tänkte jag använda javascript men då måste jag använda frames och det vill jag inte.

Funderar på att skicka med en querystring när man klickar på ett av alternativen och sen kolla om querystringen är samma som id:t på bilden. Men jag vet inte riktigt hur en sån funktion skulle se ut

Medlem sedan dec. 19996 522 inlägg
#4

om du gör det till en hyperlinkbutton kontroll kan du ju fånga om någon klickar på den,och där skicka mer värde

Medlem sedan jan. 20011 140 inlägg
#5

ska testa det

Medlem sedan juni 20011 732 inlägg
#6

Självklart ska du använda javascript, och du behöver inte använda frames... gör den i en usercontrol.

Medlem sedan jan. 20011 140 inlägg
#7

fungerar verkligen det? Tappar inte javascriptet vilken bild som ska vara vald när man går till en ny sida?

Medlem sedan juni 20011 732 inlägg
#8

andreas_lindh skrev:

fungerar verkligen det? Tappar inte javascriptet vilken bild som ska vara vald när man går till en ny sida?

Hm, jo det har du ju rätt i... om du ändå ska byta sida så kan du ju lika gärna lösa det serverside förstås, dock tycker jag inte du ska lösa det med querystrings. Här är ett litet tips som vi använder på en liknande meny med en hoovereffekt:

<asp:ImageButton id="ImageButton1" [b]onmouseover="this.src='button1_light.gif'" onmouseout="this.src='button1_dark.gif'"[/b] runat="server" ImageUrl="button1_dark.gif" />

Sedan har vi logiken för vilken knapp som ska vara markerad i koden:

// Klistrar in menyn i aspx-sidan coh sätter higlightpic=1
<uc1:menu id="Menu1" runat="server" [b]HighLightPic="1"[/b]>
</uc1:menu>

//sen i koden kör vi en ifsats för varje menyalternativ där vi sätter en ljusare bild på den knapp som representerar den sida vi befinner oss på för tillfället
if(highLightPic == 1){
  ImageButton1.ImageUrl = "Pics/logo_button1_light.gif";
  ImageButton1.Enabled = false;
}

Allt detta ligger alltså i en usercontrol så hela menyn och dess logik endast finns på ett ställe.

Medlem sedan jan. 20011 140 inlägg
#9

ok.

Men hur ändrar jag higlightpic? Eller ska jag skriva det på varje sida?

Medlem sedan juni 20011 732 inlägg
#10

Ja, på varje sida där du har din usercontrol-meny skriver du highlightpic=1,2,3,4 beroende på vilken knapp du vill ska vara markerad (naturligtvis kan du döpa dina knappar till något bättre än 1,2,3...). Sedan har du ett antal ifsatser eller en casesats eller någon annan lämplig kodsnutt som kollar vilken knapp som för tillfället ska ha en annan bild än defaultbilden!

Alltså, är du på informationssidan så kan du exempelvis skriva så här:

<uc1:menu id="Menu1" runat="server" HighLight="info">
</uc1:menu>

och sen i koden...
if(highLight == "info"){
  ImageButton1.ImageUrl = "info_light.gif";
}
Medlem sedan jan. 20011 140 inlägg
#11

Jag har testat det här nu men får det inte att fungera

på aspx sidan

<inloggad:meny runat="server" HighLightedPic="start" />

I usercontrolen

<asp:imagebutton borderwidth="0" id="ImageButton1" onmouseover="this.src='grafik/kundermeny_01.gif'" onmouseout="this.src='grafik/undermeny_01.gif'" runat="server" imageurl="grafik/undermeny_01.gif" />

och koden för usercontrolen

    Private _highlightedpic As String = ""
    Public Property highlightedpic() As String
        Get
            _highlightedpic = _highlightedpic
        End Get
        Set(ByVal Value As String)
            _highlightedpic = Value
        End Set
    End Property

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim highlightedpic As String
        Dim imagebutton1 As ImageButton
        Dim imagebutton2 As ImageButton
        Dim imagebutton3 As ImageButton
        If highlightedpic = "start" Then
            imagebutton1.ImageUrl = "grafik/kundermeny_01.gif"
            imagebutton1.Enabled = False
        ElseIf highlightedpic = "info" Then
            imagebutton2.ImageUrl = "grafik/kundermeny_02.gif"
            imagebutton1.Enabled = False
        ElseIf highlightedpic = "reg" Then
            imagebutton2.ImageUrl = "grafik/kundermeny_03.gif"
            imagebutton1.Enabled = False
        End If
    End Sub
Medlem sedan juni 20011 732 inlägg
#12

Du ska nog inte deklarera dina buttons i pageload utan direkt under klassen...

public abstract class Menu : System.Web.UI.UserControl {
protected System.Web.UI.WebControls.ImageButton ImageButton1;

private int highLightPic;
  public int HighLightPic{
    set{
      highLightPic = value;
    }
}

private void Page_Load(object sender, System.EventArgs e) {
  if(highLightPic == 1){
    ImageButton1.ImageUrl = "button.gif";
  }
}

...fast motsvarande i vb då... som en liten parentes så behöver du antagligen bara sätta highlight, därför kan du plocka bort "get". :)

Medlem sedan jan. 20011 140 inlägg
#13

Jag tror att jag måste ha med get för när jag tar bort det säger vs

h:\inetpub\wwwroot\cup\lmeny.ascx.vb(24): Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.

Nu fungerar det. Jag kollade på fel sak i min if sats. Skulla ju kolla

_highlightedpic

och inte

highlightedpic

Medlem sedan jan. 20011 140 inlägg
#14

En fråga till. Kan jag sätta navigateurl på imagebuttons eller ska jag göra länknigen på något annat sätt

Medlem sedan mars 20021 716 inlägg
#15

Kan du inte posta hela koden? (vill gärna se i helhet)

Medlem sedan jan. 20011 140 inlägg
#16

här kommer den

aspx sidan

<%@ register tagprefix="Inloggad" tagname="meny" src="lmeny.ascx" %>

<inloggad:meny runat="server" HighLightedPic="start" />

usercontrolen

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="lmeny.ascx.vb" Inherits="cup.lmeny1" %>
<asp:imagebutton borderwidth="0" id="ImageButton1" onmouseover="this.src='grafik/kundermeny_01.gif'" onmouseout="this.src='grafik/undermeny_01.gif'" runat="server" imageurl="grafik/undermeny_01.gif" />

Koden i usercontrolens codebehind

Public MustInherit Class lmeny1
    Inherits System.Web.UI.UserControl

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Public imagebutton1 As ImageButton
    Public imagebutton2 As ImageButton
    Public imagebutton3 As ImageButton

    Private _highlightedpic As String = ""
    Public Property highlightedpic() As String
        Get
            _highlightedpic = _highlightedpic
        End Get
        Set(ByVal Value As String)
            _highlightedpic = Value
        End Set
    End Property

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If _highlightedpic = "start" Then
            imagebutton1.ImageUrl = "grafik/kundermeny_01.gif"
            imagebutton1.Enabled = False
        ElseIf _highlightedpic = "info" Then
            imagebutton2.ImageUrl = "grafik/kundermeny_02.gif"
            imagebutton2.Enabled = False
        ElseIf _highlightedpic = "reg" Then
            imagebutton3.ImageUrl = "grafik/kundermeny_03.gif"
            imagebutton3.Enabled = False
        End If
    End Sub

End Class
Medlem sedan juni 20011 732 inlägg
#17

Eftersom det är en imagebutton så får du göra länkningen i koden, navigateurl är det bara hyperlinks som har och det kan du inte använda i det här fallet.

  private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e) {
  Response.Redirect = "länken";
}
Medlem sedan jan. 20011 140 inlägg
#18

Tack. Det fungerar bra förutom på en sida där jag har ett formulär med validering. Då postas formuläret när jag trycker på ett av menyalternativen

Medlem sedan jan. 20011 140 inlägg
#19

löste det

satte causesvalidation="False" på menyalternativen

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)