Gå til innhold

[Løst]Tekstboks array (If Not then f)


Anbefalte innlegg

Noen som vet om en fin side som forklarer greit om structures, skal lage et array ut i fra noen tekstbokser som regner ut noen tall.

 

Utregnings formelen ser slik ut: a = (b - c)/c , hvor b er tall som ligger i arrayet, c er det som blir skrevet inn i tekstboksen og a er det som skal bli skrevet ut etter regnestykket.

 

 

Dim b(4) As Double
Dim c(4) As Double

MyBase.Load
b = {10,10,30,40}
c = {txtbox1,txtbox2,txtbox3,txtbox4,txtbox5}
End Sub

btn_click
Calc()
End Sub

Sub Calc()
For i = b.GetUpperBound(0)
a = (b(i) - c(i))/c
Next
End Sub

 

Sånn ser jeg for meg koden nå, jeg ser for meg at 'a' må inn i en structure med en 'id'. Men er litt grønn på det området. Hjelp tas i mot med stor klem.

Lenke til kommentar
Videoannonse
Annonse

Dim a() As Double
Dim b() As Double = {???}
Dim c As New List(Of Double)
Private Sub ReadValues()
 c.Clear()
 For Each txt As Control In Controls
If txt Is TextBox And txt.Tag = "1" Then
  Dim value As Double
  If Double.TryParse(txt.Text, value) Then c.Add(value)
End If
 Next
End Sub

Private Sub Calc()
 Redim a(c.Count)
 For i = 0 To c.Count
a(i) = (b(i) - c(i))/c
 Next i
End Sub

Noe slikt?

Lenke til kommentar

Er noen hakk over hva jeg er i stand til, dette er hva jeg "kan": variabler (string etc.), if og case, sub prosedyrer, function, do loops, for og next løkker, array .. og nå structures.

 

Så har komt frem til dette, vet ikke helt om det er rett?

	Structure aaa
	Dim aa As Double
End Structure

Dim c(4) As Double
Dim b(4) As Double
Dim a(4) As aaa

	Handles MyBase.Load
	c(0) = txt0.Text
	c(1) = txt1.Text
	c(2) = txt2.Text
	c(3) = txt3.Text
	c(4) = txt4.Text
	b(0) = 2
	b(1) = 2
	b(2) = 2
	b(3) = 2
	b(4) = 2
End Sub

btnCompute.Click
	regn()
End Sub

Sub regn()
	For i = 0 To c.GetUpperBound(0)
		a(i).aa = (b(i) - c(i)) \ c(i)
	Next
End Sub

 

Hvordan kan jeg printe ut a(i).aa til en tekstboks? Prøvde

	Sub regn()
	For i = 0 To c.GetUpperBound(0)
		a(i).aa = (b(i) - c(i)) \ c(i)
		txt0.Text = a(0).aa
		txt1.Text = a(1).aa
		..etc
	Next
End Sub

 

Men da kræsja alt uten feilmelding. huhu

Lenke til kommentar

Vel, kanskje jeg skal lære deg noe av det nyttigste du noensinne kommer til å lære da, debugging :D

 

Hvis den kræsjer i funksjonen regn, så tryker du på første linjen i funksjonen (For i saken) og trykker på F9

Dette setter et breakpoint.

Når du nå starter programmet, og trykker på knappen, så vil Visual Studio pause programmet, og gi deg en gul pil i venstre delen av programmet.

Nå kan du holde over alle variablene for å se verdien i dem, og over uttrykk for å se hva de blir regnet ut til (du kan holde over deler av et uttrykk for å se hva de blir også). Trykk F10 for å hoppe til neste linje, F11 for å hoppe inn i prosedyrer eller lignende som blir kalt.

Da blir det mye enklere å se hva som går galt, og hvorfor det går galt.

 

Trykk F5 for å fortsette programmet på vanlig måte.

 

Det er forresten enklere å bruke Length egenskapen fremfor GetUpperBounds(0) også, dessuten kan den gså visualiseres under debugging.

Lenke til kommentar

Vært innom debugging også, gjorde om koden til

 

	Structure aaa
	Dim aa As Double
End Structure

Dim c(4) As Double
Dim b(4) As Double
Dim a(4) As aaa
Dim d(4) As TextBox

	Handles MyBase.Load
	c(0) = txt0.Text
	c(1) = txt1.Text
	c(2) = txt2.Text
	c(3) = txt3.Text
	c(4) = txt4.Text
	b(0) = 2
	b(1) = 2
	b(2) = 2
	b(3) = 2
	b(4) = 2
	d(0) = txt00
	d(1) = txt01
	d(2) = txt02
	d(3) = txt03
	d(4) = txt04

End Sub

btnCompute.Click
	regn()
End Sub

Sub regn()
	For i = 0 To c.GetUpperBound(0)
		a(i).aa = (b(i) - c(i)) \ c(i)
		d(i).Text = a(i).aa
	Next
End Sub

 

Debuggen sier at a(0).aa = 0, a(1).aa = 0 osv. Så det er noe med den structuren jeg ikke heelt forstår. Takker for hjelpen sålangt!

 

EDIT: Altså, er det ikke slik at a(0).aa = 'tallet som blir regnet ut'

Forstår ikke at den er 0.

 

P.S Bruker VS Express, syns ikke "Locals" viser så mye info som den gjør på skolen når lærer underviser. Er det bare meg?

Endret av nAD
Lenke til kommentar

Vet ikke, jeg bruker Visual Studio Standard, så har ikke vært så mye borti Express.

 

Men til koden din, du har ingen Constructor. Du har Form.Load, som er et event som avfyres når WM_LOAD melding blir sendt til formen din gjennom Windows Message Queue.

 

Constructorer heter Sub New i Visual Basic 2008

Public Class MyForm
 Inherits System.Windows.Forms.Form
 Public Sub New()
Me.Text = "Hello World Form!"
 End Sub
End Class

La InitializeComponents funksjonen være der den er, men all lesing/skriving til kontroller må skjer etter denne (da den lager kontrollene og plasserer dem på formen din)

 

Jeg kan ærlig talt ikke se at noe er i veien, så jeg kan ikke egentlig hjelpe deg noe mer enn det.

Endret av GeirGrusom
Lenke til kommentar

	Dim c(4) As Double
Dim b(4) As Double
Dim a(4) As Double
Dim d(4) As TextBox

	Handles MyBase.Load
	c(0) = txt0.Text
	c(1) = txt1.Text
	c(2) = txt2.Text
	c(3) = txt3.Text
	c(4) = txt4.Text
	b(0) = 2
	b(1) = 2
	b(2) = 2
	b(3) = 2
	b(4) = 2
End Sub

btnCompute.Click
	regn()
End Sub

Sub regn()
	d(0) = txt00
	d(1) = txt01
	d(2) = txt02
	d(3) = txt03
	d(4) = txt04
	For i = 0 To c.GetUpperBound(0)
		a(i).aa = (b(i) - c(i)) \ c(i)
		d(i).Text = a(i)
	Next
End Sub

Jah, ehm. Problemet var at jeg brukte "/" og ikke "/". Går å graver meg ned. Dette ble koden som funker.

Endret av nAD
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...