Jag är fullkomligt ny på Visual Basic och har ett dilemma med att kunna få åtkomst till text från flera olika textboxar (med snarlika namn tex. textbox1, textbox2, textbox3 osv. till textbox10) genom att använda for-next. Hej, Tack för ett snabbt svar! Skam den som ger sig! ;-) Jag tror att jag har löst det själv. Kruxet var att mina textboxar var i en TabControl så det var inte så konstigt att jag Inte kunde lokalisera dom i formen. Så värst snygg lösning blev det inte men det fungerar i VB.NET (Visual Basic 2005/2008 eller hur man ska förklara det). Hej,Loopa igenom flera TextBoxar?
Största problemet är att anropa textbox1.text, textbox2.text ... textbox10.text i for-next-satsen. Har provat med följande utan framgång. Något måste saknas, men vad? Det border funka!
Dim strContent As String
For i = 1 To 10
strContent = Me.Controls("textbox" & i).Text
' strContent skrivs till tex. en fil
Next
En annan variant som jag också provade utan framgång var:
Dim strContent As String
For i = 1 To 10
strContent = textbox(i).Text
' strContent skrivs till tex. en fil
Next
Glömde nästan att säga att jag använder Visual Basic 2008 Express och applikationen ingår i en WindowsForm.Sv: Loopa igenom flera TextBoxar?
Nu kan jag inte VS2008, men i VB6 kan man använda ditt andra exempel om du har dina textboxar i en array :
Dim strContent As String
For i = 1 To 10
strContent = textbox(i).Text
' strContent skrivs till tex. en fil
Next
Dvs. Lägg ut en textbox på formen.
Kopiera och klistra in så kommer VB fråga om du vill ha boxarna i en array.
Annars får man nog loopa med något liknande
For each object in form1
...
next
/MartinSv:Loopa igenom flera TextBoxar?
Att göra en for-each för objektet har jag också provat men då hittas inte textboxarna, konstigt nog. Övriga objekt i formen kan jag nå, statusstrip, menustrip, tabpage etc som jag förutom textboxarna har i formen.
Men jag provade att ändra:
Dim strContent As String
For i = 1 To 10
strContent = Me.Controls("textbox" & i).Text
' strContent skrivs till tex. en fil
Next
till (för att felsöka):
Dim strContent As String
For i = 1 To 10
Try
strContent = Me.Controls("textbox" & i).Text
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
Och fick till svar:
"Objektreferensen har inte angetts till en instans av ett objekt"
Som sagt är jag en nybörjare så jag förstår inte riktigt vad som menas...Sv: Loopa igenom flera TextBoxar?
Jag googlade och såg på en del sidor att man måste skapa en "control array" själv (finns tydligen i vb6 men inte i .Net).
Men min lösning UTAN "control array" är med två for-next-satser istället och ser ut så här:
Dim strContent As String
’ En ”loop” för alla textboxars nummer
For i = 1 To 10
’ Skapa textboxens namn tillfälligt för varje nummer i "loopen"
Dim BoxName = "TextBox" & CStr(i)
’ "Loopa" igenom alla controller i objektet, i detta fallet en TabPage som heter "TabPage1"
For Each c As Control In TabPage1.Controls
' Kontrollera så att det verkligen är en textbox
If TypeOf c Is TextBox Then
' Kontrollera så att det är en av de 10 textboxar som vi vill får tillgång till
If CType(c, TextBox).Name = BoxName Then
' Plocka ut text ur textbox till sträng
strContent = CType(c, TextBox).Text
End If
End If
Next
Next
Ja, som sagt. Så värst snygg lösning blev det inte. Känns inte så effektivt att göra en "loop" (for-next-sats) för alla textboxar som ska kontrolleras 10 gånger. Förslag till förbättring välkomnas!
Hittade lösningen på problemet här:
http://www.tek-tips.com/viewthread.cfm?qid=1448348&page=4Sv: Loopa igenom flera TextBoxar?
du kan titta på mitt inlägg i den här tråden:
[Index på kontroller]