webForumDet fria alternativet

Knapp probem

.NETur .NET

20 svar · 1 093 visningar · startad av Mycodez

Medlem sedan feb. 2010445 inlägg
Frågan#1

Hej!

Jag har en liten fråga angående en knapp jag gör till min hemsida.
Knappen ska öka med ett varje gång den trycks på.

jag har en label som skriver ut hur många gånger knappen har tryckts på labels namn är lblAntalja

och knappens namn är btnJa

jag kodar i asp.net vb språket

    Protected Sub btnJa_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnJa.Click
        Dim x As Integer
        Dim ja As String = lblAntalja.Text

            x += 1
            lblAntalja.Text = "" & x & " vill komma tillbaka"

    End Sub

är det inte så?
för när jag kodar såhär så stannar label räkning vid 1 .

det värmer med snabbt svar:)

MVH MyCodez

Medlem sedan dec. 20025 483 inlägg
#2

Varje gång knappen trycks på så initialiseras x till 0, så du behöver spara undan värdet på något sätt. Antingen gör du x till en medlemsvariabel i klassen:

public class Foo
  private x as integer
  ...
end class

...eller så kan du göra så här:

    Protected Sub btnJa_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnJa.Click
        Dim x As Integer
        Dim ja As String = lblAntalja.Text

            Integer.TryParse(ja, x)
            x = x + 1
            lblAntalja.Text = "" & x & " vill komma tillbaka"

    End Sub
Medlem sedan feb. 2010445 inlägg
#3

sätter man som den sista kod alternativet så stannar den fortfarande vid 1 ;( men det med public class Foo var sätter man det?

Medlem sedan dec. 20025 483 inlägg
#4

Var lite för snabb där: om du istället har två labels, en som håller värdet (lblAntal) och en som håller den statiska texten (lblAntalJa) så fungerar detta:

    Protected Sub btnJa_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnJa.Click
        Dim x As Integer
        Dim antal As String = lblAntal.Text

            Integer.TryParse(antal, x)
            x = x + 1
            lblAntal.Text = x

    End Sub
Medlem sedan okt. 2006224 inlägg
#5

Eller så lagrar du värdet i ViewState så det sparas mellan varje postback. Har använt en C# -> VB.NET konverterare så är kanske inte bra optimerad VB.NET kod.

    Protected Sub btnJa_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnJa.Click
        Dim clickValue As Integer = 0
        If (Not (ViewState("clickValue")) Is Nothing) Then
            clickValue = Convert.ToInt32(ViewState("clickValue"))
        End If
        clickValue = (clickValue + 1)
        ViewState("clickValue") = clickValue
        lblAntal.Text = clickValue
    End Sub
Medlem sedan feb. 2010445 inlägg
#6

det funakar nu :) men går det att spara x:et för om man stänger ner sidan nu så lagras inte talet i x vi säger att x är 3 se när man har stängt ser sidan igen så e x 0 igen hur sparar man det?

Medlem sedan okt. 2006224 inlägg
#7

Mja.. då får du lagra det på servern på något sätt. Antingen i en databas eller en textfil. Eftersom jag inte vet om du har tillgång till någon databas så kommer här en väldigt enkel kodsnutt om hur du kan spara ett värde till en textfil.

Dim TargetFile As StreamWriter

        Try
            TargetFile = New StreamWriter("test.txt", True)
        Catch
            Throw New Exception()
        End Try

        Try
            TargetFile.Write(lblAntal.Text)
        Catch
            Throw New Exception()
        End Try

        TargetFile.Close()

Ingen bra kod, så jag föreslår att du googlar på spara filer i VB.NET.

Medlem sedan feb. 2010445 inlägg
#8

Jag har tillgång till en Mysql databas men vet bara ínte hur man kopplar den till sidan riktigt blir mkt tacksam om ni kan fixa en enkel guide eller om ni vet någon bra sidan ;)

Medlem sedan feb. 20034 441 inlägg
#9

Med hjälp av Google hittar man bl.a. den här:
http://www.access-programmers.co.uk/forums/showpost.php?p=440194&postcount=2

Medlem sedan feb. 2010445 inlägg
#10

Går det att koppla en SQL databasen till Visual basic (jag kodar i den)

Medlem sedan feb. 2010445 inlägg
#11

matlin skrev:

Mja.. då får du lagra det på servern på något sätt. Antingen i en databas eller en textfil. Eftersom jag inte vet om du har tillgång till någon databas så kommer här en väldigt enkel kodsnutt om hur du kan spara ett värde till en textfil.

Dim TargetFile As StreamWriter

        Try
            TargetFile = New StreamWriter("test.txt", True)
        Catch
            Throw New Exception()
        End Try

        Try
            TargetFile.Write(lblAntal.Text)
        Catch
            Throw New Exception()
        End Try

        TargetFile.Close()

Ingen bra kod, så jag föreslår att du googlar på spara filer i VB.NET.

Jag förstår itne riktigt Try saten du har gjort tror du att du kan förklara den?

Medlem sedan okt. 2006224 inlägg
#12

Mycodez skrev:

Jag förstår itne riktigt Try saten du har gjort tror du att du kan förklara den?

TargetFile = New StreamWriter("test.txt", True)

Här skapar/öppnar vi en fil som heter "test.txt". Vi använder en Try/Catch sats för att fånga eventuella fel som kan ske. Kan t.ex. vara rättighetsfel. Om ett fel uppstår i koden ovan så kastar vi ett generellt Exception fel som bör innehålla problemet som uppstår. Som sagt, inget vackert, men bör fungera.

Vi kan lika gärna göra:

        Try
            TargetFile = New StreamWriter("test.txt", True)
            TargetFile.Write(lblAntal.Text)
        Catch
            Throw New Exception()
        End Try

Så minskar vi iaf antalet Try/Catch satser.

Medlem sedan feb. 2010445 inlägg
#13

jag får att Throw New exception() e fel när jag kodar som du göra och så står det
stackkspårning:
[Exception: Ett undantagsfel av typen System.Exception uppstod.]
_Default.btnJa_Click(Object sender, EventArgs e) in C:\inetpub\wwwroot\Default.aspx.vb:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981

om det ka nvar till hjälp fattar inget e ganska ny på detta :)

Medlem sedan juli 20022 537 inlägg
#14

Anledningen till att du bara får ett så pass generellt svar är för att du kastar en ren Exception.

Fånga tag i den befintliga och kasta den istället.

Try
  TargetFile = New StreamWriter("test.txt", True)
  TargetFile.Write(lblAntal.Text)
Catch ex As Exception
  Throw ex
End Try

Eller så kan du skippa hela try-biten för tillfället.

Medlem sedan feb. 2010445 inlägg
#15

Okej. men man får tacka ändå

Medlem sedan aug. 20003 575 inlägg
#16

Vimp skrev:

Anledningen till att du bara får ett så pass generellt svar är för att du kastar en ren Exception.

Fånga tag i den befintliga och kasta den istället.

Try
  TargetFile = New StreamWriter("test.txt", True)
  TargetFile.Write(lblAntal.Text)
Catch ex As Exception
  Throw ex
End Try

Eller så kan du skippa hela try-biten för tillfället.

Egentligen kan du skippa Try catchen helt och hållet i detta fallet då du inte gör något vettigt i den, snarare förstör mer genom att köra Throw ex och förstör call stacken vid debugging.
Använd hellre Using i detta läget så får du automatiskt en dispose på objektet :)

Och om man fångar ett fel för att utföra något och kasta det ursprunliga vidare utan att förstöra callstacken använd enbart throw så kastas ursprungsexceptionet igen :)

Medlem sedan feb. 2010445 inlägg
#17

Hur gör man detta med Using då?? sorry e ny på detta

Medlem sedan aug. 20003 575 inlägg
#18

Mycodez skrev:

Hur gör man detta med Using då?? sorry e ny på detta

Using streamWriter = StreamWriter("test.txt", True)
     streamWriter.Write(lblAntal.Text)
End Using
Medlem sedan feb. 2010445 inlägg
#19

När jag skiver in detta som skrev in Nickemannen med Using får jag detta fel rättare sagt Error meddelande från Visual studio:
type of 'StreamWriter' cannot be inferred from an expression containing 'StreamWriter'.

Vad e det som e fel?
Detta är koden:

 

Imports System.IO

        Dim x As Integer
        Dim antal As String = lblAntalja.Text
        Dim TargetFile As StreamWriter

        Integer.TryParse(antal, x)
        x = x + 1
        lblAntalja.Text = x

        Using StreamWriter = StreamWriter("test.txt", True)
            streamWriter.Write(lblAntalja.Text)
        End Using
Medlem sedan okt. 2006224 inlägg
#20

Din "Using StreamWriter = ..." använder du ett stort 'S' och sedan i din using använder du ett litet 's'.

Prova att ändra "Using StreamWriter = ..." till "Using streamWriter = ..." så borde du inte få det felet.

143 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)