Håller på å lära mig lite om objektorientering i VB. Har skrivit ett mycket enkelt program som adderar ett tal med sig själv. Det jag skulle göra om jag var du är att ha en metod i klassen som gör uträkningen, skulle väl se ut nått i stil med Kvalficerat "bullshit" Objektorienterat Testa att klistra in detta enkla exempel och !!! förstå vad och hur den gör sina trix. För att kunna skriva : Kalle skrev: "Det är så här att Ni ser inte skogen för bara träd.För att räkna ut att 2 + 2 = 5 så Hmm, tror att alla har missuppfattat hela min fråga. Frågan var inte hur jag skall kunna addera ett tal med sig själv på lättaste sätt. Det var helt enkelt så att jag vill lära mig objektorientering bättre. Sen struntar jag i om det finns bättre sätt att lösa just denna uppgiften på. Har ställt samma fråga i detta forum innan. Fick dock inget bra svar på den frågan just då. Nu... några år senare... har jag lärt mig att programera objektorienterat och inser att felet med det sättet du vill göra på är att det inte riktigt är objektorienterat. Objektorientering
Form1:
<code>
Dim talet As New Class1
Private Sub btnaddera_Click()
talet.addera (Val(tal.Text))
Label1.Caption = talet.tal
End Sub
</code>
Classen:
<code>
Public tal As Integer
Public Sub addera(a As Integer)
tal = tal + a
End Sub
</code>
När man trycker på knappen så ändras alltså label1 till dubbelt så mycket
Det jag skulle vilja är att man skall kunna skriva ungefär:
<code>
Form1:
Dim talet As New Class1
Private Sub btnaddera_Click()
talet = talet + talet
End Sub
</code>
i Form1 och samma sak ska hända.... hur ser då classen ut?
Tacksam för svar!Sv: Objektorientering
(i klassen)
Public Sub DoubleValue()
Tal = Tal + 1
End Sub
Sedan i onClick evente kallar du på metoden DoubleValue() istället, typ nått i stil med detta
Private Sub btnaddera_Click()
talet.DoubleValue()
label1.Text = talet.tal 'glöm inte att uppdatera label:n efter förändringen
End Sub
Hoppas det klarnade lite ;)
God Jul!
//KalleSv: Objektorientering
Alla som börjar med programmering börjar i fel ända.Lär dig skriva enkla funktioner.
En funktion lämnar i retur något som den skall arbetat med.
Dvs man skickar ett argument till funktionen och man får tillbaka det bearbetade resultatet.
Alla djä... smånissar skall börja på högsta nivå , phuuu jag blir så trött.
Det är så här att Ni ser inte skogen för bara träd.För att räkna ut att 2 + 2 = 5 så
behöver man numera skriva ett program som är 4 Mbyte. Bull Bull Bull.Sv: Objektorientering
1. Label1 , 2. TextBoxar , 1. CommandButton
<code>
Option Explicit
Private Sub Command1_Click()
'Nu skall jag kalla på funktionen Reverse
Label1.Caption = Reverse(Text1.Text) 'skickar ett argument
MsgBox Label1.Caption
Text1.Text = 2
Text2.Text = 2
'Nu skall jag kalla på funktionen Addera
Label1.Caption = Addera(Int(Text1.Text), Int(Text2.Text)) 'skickar två argument
MsgBox Label1.Caption
End Sub
Private Function Reverse(ByVal inString As String) As String
'Jag heter Reverse jag kan vända ett ord till baklängesskrift
Dim i As Long, mittjobb As String
For i = Len(inString) To 1 Step -1
mittjobb = mittjobb & Mid$(Text1.Text, i, 1)
Next '
'Nu är jag färdig , här kommer resultatet
Reverse = mittjobb
End Function
Private Function Addera(ByVal Tal1 As Long, ByVal Tal2 As Long) As Long
'Jag heter Addera jag kan addera två heltal
Addera = Tal1 + Tal2
End Function
</code>Sv: Objektorientering
<code>
talet=talet + talet
</code>
så måste du använda ett språk som klarar Operator Overloading, t ex C# eller C++. VB6 och VB.Net stödjer inte Operator Overloading.Sv: Objektorientering
<code>
(i klassen)
Public Sub DoubleValue()
Tal = Tal + 1
End Sub
</code>
Det var nog tänkt att stå så här :
<code>
(i klassen)
Public Sub DoubleValue()
Tal = Tal * 2
End Sub
</code>Sv: Objektorientering
behöver man numera skriva ett program som är 4 Mbyte. Bull Bull Bull."
Allting ska användas med måtta, så även Operator Overloading. När man ser folk skriva en klass Bil som kan adderas med en annan Bil och det resulterar i en klass Krock som ärver av klassen FörsäkringsÄrende så har det ju gått för långt :-)
Men Operator Overloading är inte fel om man t ex skriver ett matematikbibliotek för komplexa tal eller liknande. Det finns tillfällen då det inte är fel att kunna definiera operatorer för klasser.Sv: Objektorientering
Om jag omformulerar frågan lite:
Jag har skrivet ett program som ser ut som följande:
Class:
<code>
Public tal As Integer
Public Sub addera(a As Integer)
tal = tal + a
End Sub
</code>
Form1:
<code>
Dim talet As New Class1
Private Sub btnaddera_Click()
talet.addera (Val(tal.Text))
Label1.Caption = talet.tal
End Sub
</code>
Jag vill att man ska kunna skriva:
Form1:
<code>
Dim talet As New Class1
Private Sub btnaddera_Click()
talet.tal = talet.tal * 2
End Sub
</code>
Hur ska då Classen se ut?Sv:Objektorientering
Nu var det jättelängesedan jag programmera vb så jag har inte så bra koll på syntax. Ett objektorienterat sätt (Om nu vb kan räknas som objektorienterat) att göra det du vill göra hade varit att göra såhär... typ:
Class:
<code>
private tal As Integer
Function addera(tal2 As Double) As Integer
addera = tal + tal2
End Sub
</code>
Form1
<code>
Dim talet As New Class1
Private Sub btnaddera_Click()
Label1.Caption = talet.addera (Val(tal.Text))
End Sub
</code>
en bra regel är att alltid ha fälten i objektet private (eller protected om det nu finns i vb?) och sen göra funktioner för att ändra dessa, detta gör att man minimerar risken att ge fälten konstiga värden.