Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Tanke vurpa i egen Klass?

Postades av 2006-06-01 14:27:32 - Torgny Söderström, i forum vb.net, Tråden har 13 Kommentarer och lästs av 762 personer

Jag har en Klass "TsUppdrag" som jag sedan använder i Klassen "Tsplanering".
Denna Klass är inte färdig men jag fastnade redan vid första testen.
Den har en vektor som jag döpt till "PAllaUppgifter"
Det jag har börjat testa är att lägga till poster i vektorn med sub-rutinen AddUppdrag och sedan läsa av dem genom egenskapen AllaUppdrag.
Det som händer är att alla poster innehåller samma information, den sista jag matat in.

Vad är fel i koden?
Om ni ser fler fel i koden som inte har med just detta problem så är jag tacksam för hjälp med det också.

Public Class TsUppdrag
    Public Uppdrag As String
    Public Ansvatig As String
    Public Kontaktas As String
    Public TillFrogad As Boolean = False
    Public OK As Boolean = False
End Class

__________________

Public Class TsPlanering

    'Minnes banken
    Private PAllaUppdrag(0) As TsUppdrag


    'Bearbetning av minnet PAllaUppdrag
    'Skriv och läs av hela vektorn
    Property AllaUppdrag()
        Get
            Return PAllaUppdrag
        End Get
        Set(ByVal Value)
            ReDim PAllaUppdrag(Value.Length - 1)
            PAllaUppdrag = Value
        End Set
    End Property
    'Lägg till en post med värden
    Sub AddUppdrag(ByVal Value As TsUppdrag)
        If PAllaUppdrag(0) Is Nothing Then
            PAllaUppdrag(0) = Value
        Else
            ReDim Preserve PAllaUppdrag(PAllaUppdrag.Length)
            PAllaUppdrag(PAllaUppdrag.Length - 1) = Value
        End If
    End Sub
    'Radera alla väredn
    Sub DelUppdrag()
        ReDim PAllaUppdrag(0)
        PAllaUppdrag(0) = Nothing
    End Sub
    'Radera en känd post i PAllaUppdrag
    Function DelUppdragsPost(ByVal Value As Integer) As Boolean
        If PAllaUppdrag.Length > Value Then
            PAllaUppdrag(Value).Uppdrag = ""
            PAllaUppdrag(Value).Ansvatig = ""
            PAllaUppdrag(Value).Kontaktas = ""
            PAllaUppdrag(Value).TillFrogad = False
            PAllaUppdrag(Value).OK = False
            Return True
        Else
            MessageBox.Show("Uppgiften kunde ej utföras!" & vbCrLf & "(Function DelUppdragPost har felaktigt värde)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End If
    End Function
    'Ändra känd post i PAllaUppdrag
    Function AddUppdragsPost(ByVal Value As Integer, ByVal Post As TsUppdrag) As Boolean
        If PAllaUppdrag.Length > Value Then
            PAllaUppdrag(Value) = Post
            Return True
        Else
            MessageBox.Show("Uppgiften kunde ej utföras!" & vbCrLf & "(Function AddUppdragPost har felaktigt värde)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End If
    End Function
    'Läs från känd post i PAllaUppdrag
    Function ReadUppdragsPost(ByVal Value As Integer) As TsUppdrag
        If PAllaUppdrag.Length > Value Then
            Return PAllaUppdrag(Value)
        Else
            MessageBox.Show("Uppgiften kunde ej utföras!" & vbCrLf & "(Function ReadUppdragPost har felaktigt värde)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return Nothing
        End If
    End Function


End Class

__________________
Och till sist koden jag använder för att testa det hela
__________________

'testknapp2
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MsgBox("Detta är en text knapp för egna klasserna ""TsUppdrag"" & ""TsPlanering"".")
        Dim Upp As New TScontroler.TsUppdrag
        Dim post As New TScontroler.TsUppdrag
        Dim Plan As New TScontroler.TsPlanering

        Upp.Uppdrag = "Städa"
        Upp.Ansvatig = "Torgny"
        Upp.Kontaktas = "0123-456789"
        Upp.TillFrogad = True
        Plan.AddUppdrag(Upp)
        MsgBox("Fösta kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & vbCrLf & post.Ansvatig & vbCrLf & post.Kontaktas & vbCrLf & post.TillFrogad & vbCrLf & post.OK)
        Next

        Upp.Uppdrag = "Sång"
        Upp.Ansvatig = "Eva"
        Upp.Kontaktas = "0123-456789"
        Upp.TillFrogad = False
        Plan.AddUppdrag(Upp)
        MsgBox("Andra kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & vbCrLf & post.Ansvatig & vbCrLf & post.Kontaktas & vbCrLf & post.TillFrogad & vbCrLf & post.OK)
        Next

        Upp.Uppdrag = "Dans"
        Upp.Ansvatig = "Christer"
        Upp.Kontaktas = ""
        Upp.TillFrogad = True
        Upp.OK = True
        Plan.AddUppdrag(Upp)
        MsgBox("Tredje kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & vbCrLf & post.Ansvatig & vbCrLf & post.Kontaktas & vbCrLf & post.TillFrogad & vbCrLf & post.OK)
        Next
    End Sub


___________________

Tack från Torgny


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-01 16:50:12 - Thomas Vanhaniemi

Jag har inte läst igenom din kod speciellt långt och noggrannt, men jag ser att du använder gamla VB sättet för att hantera detta.
.NET har ju collections och arraylist etc som du med fördel skall använda istället. Vill du skräddarsy en egen collection class kan du ärva ner collectionbase eller någon av de andra basklasserna och bygga ut därifrån.

Du hittar allt detta under System.Collections namespacet.


Svara

Sv:Tanke vurpa i egen Klass?

Postades av 2006-06-02 13:36:32 - Marcus Gus

I VS2005 är ju generic'ska listor asmidiga att använda. Kolla på System.Collections.Generic.List...


Svara

Sv:Tanke vurpa i egen Klass?

Postades av 2006-06-02 19:23:31 - Torgny Söderström

Jag förstår inte riktig.

Skulle du kunna förklara med ett litet kod exempel.
Vad för fördelar blir det om jag gårifrån det "gammla" settet att koda.

Torgny


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-02 20:36:19 - Torgny Söderström

Jag har labbat lite och kommit fram till att mitt problem ligger i min test kod.

Jag laddar variabeln "Upp" med värden och sender dom till "Plan" som har en vektor att lagra värdena i.
När jag sedan återanvänder "Upp" och laddar in nya värden i "Upp" ändras inte bara dessa utan också de som finns i vekorn i "Plan".
Vad kommer detta sig, Är inte dessa variabler två skilda lagringsplatser med information?
Hur förhindrar jag det?
(Jag uppteckte detta när jag provade att inte återanvända "upp", då fungerade det som väntat)

mvh
Torgny


Svara

Sv:Tanke vurpa i egen Klass?

Postades av 2006-06-02 21:41:47 - Jimmy Thulin

Du använder ju samma instans, samma objekt hela tiden och bara ändrar värdena på egenskaperna. Då är det självklart att värdena ändras i vektorn. Objektet är en referens och pekar hela tiden på samma minnesområde (heap). Du måste skapa ett nytt "upp"-objekt för varje gång du lägger till objektet i vektorn (med hjälp av new()) Sedan bör du nog använda en konstruktor för att egenskaperna i objektet ska få sina värden. Du skulle nog kanske behöva läsa på lite mer om objektorientering tror jag.


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-03 13:41:04 - Torgny Söderström

Tack så mycket för svaret.

Jo jag vet att jag har mycket kvar att lära, därför tackar jag dej och alla andra här som är mina lärare som jag kan rådfråga.

Jimmy skulle du kunna skriva lite ex.kod med new() sedan låvar jag att jag ska slå upp och läsa om de övriga begreppen, konstruktor & objektorjentering. Jag hoppas att konstruktor finns i registret på min bok, objektorgentering gör det det vet jag för där har jag läst endel.

Tack alla lärare

Torgny


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-03 15:16:30 - Jimmy Thulin

Ok, jag ska försöka förklara lite. Jag kommenterar och ändrar litegrand i koden.

        
        ' Här skapas en ny instans eller ett nytt objekt av TsUppdrag klassen. Du reserverar plats i minnesområdet i och med detta. Det du bör göra här är att endast deklarera en variabel av typen TsUppdrag och inte skapa själva instansen/objektet ännu. "Bara för att man köper ett garage så måste ju inte bilen följa med direkt" har man hört några gånger i dessa sammanhang. Ny kod är markerad med "***"
        'Dim Upp As New TScontroler.TsUppdrag - Kommenterar ut din kod här

        Dim Upp as TSControler.TsUppdrag '***Endast variabeldekleration av typen TsUppdrag
        Dim post As New TScontroler.TsUppdrag
        Dim Plan As New TScontroler.TsPlanering

        Upp = new TsUppdrag() '***En ny instans/nytt objekt skapas av klassen TsUppdrag. 
'Nytt minnesområde.
        ' Här nedan skulle du istället ha använt en egen konstruktor för att sätta värden på 
'objektets egenskaper/properties (Uppdrag, Ansvarig, Kontaktas, Tillfrogad). Läs om detta.
        Upp.Uppdrag = "Städa"
        Upp.Ansvatig = "Torgny"
        Upp.Kontaktas = "0123-456789"
        Upp.TillFrogad = True
'Här sätter du in det objektet du precis skapade och i vektorn så refererar du till det 
'minnesområdet. Torgny-objektet är på denna plats.
        Plan.AddUppdrag(Upp)         MsgBox("Fösta kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & VbCrLf & post.Ansvatig & VbCrLf & post.Kontaktas & VbCrLf & post.TillFrogad & VbCrLf & post.OK)
        Next

'***En ny instans/nytt objekt skapas av klassen TsUppdrag. Nytt minnesområde.
        Upp = new TsUppdrag()         
        Upp.Uppdrag = "Sång"
        Upp.Ansvatig = "Eva"
        Upp.Kontaktas = "0123-456789"
        Upp.TillFrogad = False
        Plan.AddUppdrag(Upp) 'Här sätter du in Eva-objektet som referar till ett annat minnesområde
        MsgBox("Andra kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & VbCrLf & post.Ansvatig & VbCrLf & post.Kontaktas & VbCrLf & post.TillFrogad & VbCrLf & post.OK)
        Next

'***En ny instans/nytt objekt skapas av klassen TsUppdrag. Nytt minnesområde.
        Upp = new TsUppdrag() 
        Upp.Uppdrag = "Dans"
        Upp.Ansvatig = "Christer"
        Upp.Kontaktas = ""
        Upp.TillFrogad = True
        Upp.OK = True
'Slutligen sätts även Christer-objektet in som referar till ett annat minnesområde.
        Plan.AddUppdrag(Upp)         MsgBox("Tredje kollen")
        For Each post In Plan.AllaUppdrag
            MsgBox(post.Uppdrag & VbCrLf & post.Ansvatig & VbCrLf & post.Kontaktas & VbCrLf & post.TillFrogad & VbCrLf & post.OK)
        Next



Hoppas att det klarnade lite. Objektorienteringen är den svåraste biten tycker jag, tar tid att greppa allting.


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-03 15:19:52 - Thomas Vanhaniemi

Du skall nog gå ifrån det gamla sättet att koda. Det är inte objektorienterat och väldigt krångligt att hantera.

Om du vill spara instanser av klasser i en lista skall du använda dig av en klass som sparar de andra klasserna. Självklart kan du ha en array och ReDim den hela tiden, men det finns inga direkta fördelar med detta. Det blir svårt att hantera denna lista och utföra operationer på den. Helt enkelt mer att hålla reda på.

I C++ använder man ofta dynamiska listor, vilket innebär att ett objekt länkas till ett annat etc. Fördelen med denna implementation är att du inte behöver ändra storleken på arrayer och flytta data från en plats till en annan, utan kan snabbt och enkelt lägga till och ta bort samt flytta på data i listan.

Vilken version av VB.NET skriver du i?

Du kan hitta ett litet exempel på hur du kan ärva från en arraylist och göra din egna klass på http://aspnet.4guysfromrolla.com/articles/102302-1.2.aspx. Du behöver bara ta exempel från sektionerna där en egen implementation av UserCollection skapas.


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-04 23:23:50 - Andreas Hillqvist

Detta kanske hjälper:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("Detta är en text knapp för egna klasserna ""TsUppdrag"" & ""TsPlanering"".")

        Dim Uppdrag As TScontroler.TsUppdrag
        Dim Plan As New TScontroler.TsPlanering

        Uppdrag = New TsUppdrag
        With Uppdrag
            .Uppdrag = "Städa"
            .Ansvatig = "Torgny"
            .Kontaktas = "0123-456789"
            .TillFrogad = True
        End With
        Plan.Add(Uppdrag)

        MsgBox("Fösta kollen")
        For Each Uppdrag In Plan
            With Uppdrag
                MsgBox(.Uppdrag & vbCrLf & _
                       .Ansvatig & vbCrLf & _
                       .Kontaktas & vbCrLf & _
                       .TillFrogad & vbCrLf & _
                       .OK)
            End With
        Next

        Uppdrag = New TsUppdrag
        With Uppdrag
            .Uppdrag = "Sång"
            .Ansvatig = "Eva"
            .Kontaktas = "0123-456789"
            .TillFrogad = False
        End With
        Plan.Add(Uppdrag)

        MsgBox("Andra kollen")
        For Each Uppdrag In Plan
            With Uppdrag
                MsgBox(.Uppdrag & vbCrLf & _
                       .Ansvatig & vbCrLf & _
                       .Kontaktas & vbCrLf & _
                       .TillFrogad & vbCrLf & _
                       .OK)
            End With
        Next

        Uppdrag = New TsUppdrag
        With Uppdrag
            .Uppdrag = "Dans"
            .Ansvatig = "Christer"
            .Kontaktas = ""
            .TillFrogad = True
            .OK = True
        End With
        Plan.Add(Uppdrag)

        MsgBox("Tredje kollen")
        For Each Uppdrag In Plan
            With Uppdrag
                MsgBox(.Uppdrag & vbCrLf & _
                       .Ansvatig & vbCrLf & _
                       .Kontaktas & vbCrLf & _
                       .TillFrogad & vbCrLf & _
                       .OK)
            End With
        Next
    End Sub

    Public Class TsUppdrag
        Public Uppdrag As String
        Public Ansvatig As String
        Public Kontaktas As String
        Public TillFrogad As Boolean = False
        Public OK As Boolean = False
    End Class




    Public Class TsPlanering
        Inherits System.Collections.CollectionBase

        'Lägg till en post med värden
        Sub Add(ByVal Value As TsUppdrag)
            List.Add(Value)
        End Sub

        'Radera en känd post i PAllaUppdrag
        Function Del(ByVal Index As Integer) As Boolean
            If Index > 0 And Index < List.Count Then
                list.RemoveAt(Index)
                Return True
            Else
                Return False
            End If
        End Function

        'Ändra känd post i PAllaUppdrag
        Function Update(ByVal Index As Integer, ByVal Post As TsUppdrag) As Boolean
            If Index > 0 And Index < List.Count Then
                list.Item(Index) = Post
                Return True
            Else
                Return False
            End If
        End Function

        'Läs från känd post i PAllaUppdrag
        Function ReadUppdragsPost(ByVal Index As Integer) As TsUppdrag
            If Index > 0 And Index < List.Count Then
                Return list.Item(Index)
            Else
                Return Nothing
            End If
        End Function
    End Class
End Class


Svara

Sv: Tanke vurpa i egen Klass?

Postades av 2006-06-05 11:51:27 - Torgny Söderström

Tack så mycket för all hjälp och specielt för kod exempelena jag fått.
Jag tycker det många ggr är lättare att läsa kod än förstå en förklarande text pga. att jag inte har lärt mej alla begrepp än.

Det frågades efter vilken verition av VB.net jag använder, jag har visualstudio 2003 student och lärarutgåva med 1.1 dotnet, med bara VB.net instalerat
En följdfråga på detta kan jag uppgradera till dotnet 2.0 ,hur gör jag om det går, vad händer med mina gammla projekt måste jag skriva om den koden?

mvh
Torgny


Svara

Sv:Tanke vurpa i egen Klass?

Postades av 2006-06-05 12:08:20 - Jimmy Thulin

Det konverterar du till 2.0 i VS 2005 automatiskt. När jag själv konverterade ett lagom stort projekt från 1.X till 2.0 så fick jag endast ändra på något ställen i koden efter konverteringen. Man skulle skriva på ett lite annat sätt i VS 2005 i ett visst avseende men Visual Studio sa vad som skulle skrivas istället så det var inga problem.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
706
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies