Springen naar inhoud


- - - - -
VS 2015

Textbox Loop Vb6 En Vb.net

VS2015 Textbox loop

  • Log in a.u.b. om te beantwoorden
Er zijn 8 reacties in dit onderwerp

#1 fvangrieken

fvangrieken

    Starting Developer

  • Leden
  • 23 berichten
    Laatst bezocht 26 aug 2020 15:50

Geplaatst op 17 april 2020 - 13:33

In VB6 heb ik 118 textboxen die ik in een For-Next loop kan bewerken.
Private Sub text1_Change(Index As Integer)
For t = 0 To 118
If Text1(t).Text = "school" Then
Text1(t).BackColor = &HFF&
Text1(t).ForeColor = &HFFFF&
ElseIf Text1(t).Text = "vrij" Then
    Text1(t).BackColor = &HFF00&
    Text1(t).ForeColor = &H0&
ElseIf Text1(t).Text = "studie" Then
    Text1(t).BackColor = &HFFFF00
    Text1(t).ForeColor = &H0&
ElseIf Text1(t).Text = "sport" Then
    Text1(t).BackColor = &HFF0000
    Text1(t).ForeColor = &HFFFF&
ElseIf Text1(t).Text = "eten" Then
    Text1(t).BackColor = &HFF0000
    Text1(t).ForeColor = &HFFFF&
ElseIf Text1(t).Text = "muziek" Then
    Text1(t).BackColor = &HFF0000
    Text1(t).ForeColor = &HFFFF&
ElseIf Text1(t).Text = "hobby" Then
    Text1(t).BackColor = &HFF0000
    Text1(t).ForeColor = &HFFFF&
ElseIf Text1(t).Text = "werk" Then
    Text1(t).BackColor = &HFF0000
    Text1(t).ForeColor = &HFFFF&
End If

Next t
End Sub
Op dezelfde manier wil ik dat in VB.Net  (VisualStudio2017) doen, maar als ik een textbox kopieer krijg ik niet zoals in VB6 text1 en dan text1(0) en dan text1(1) enz.., maar textbox2 en dan textbox3 enz..
Bovendien kan ik de backcolor en forecolor zo niet aanpassen.
Ik hoop dat iemand mij kan helpen.


#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1202 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 17 april 2020 - 21:58

Andere methode:

Visual Basic Code:
Public Class FormTextBoxColors
	Private Shared random As New Random(97)
	Private ReadOnly items As String() = {"school", "vrij", "studie", "sport", "eten", "muziek", "hobby", "werk"}

	Public Sub New()
		InitializeComponent()
		BackColor = Color.SteelBlue
		Padding = New Padding(10, 10, 10, 10)
		Dim panel As New FlowLayoutPanel With {.Dock = DockStyle.Fill}
		Controls.Add(panel)
		For index As Integer = 1 To 120
			Dim box As New TextBox
			AddHandler box.TextChanged, AddressOf BoxTextChanged
			box.Text = items(random.Next(items.Length))
			panel.Controls.Add(box)
		Next
	End Sub

	Private Sub BoxTextChanged(sender As Object, e As EventArgs)
		Dim box = DirectCast(sender, TextBox)
		SetColor(box, box.Text)
	End Sub

	Private Sub SetColor(control As Control, value As String)
		If Not items.Contains(value) Then
			control.BackColor = SystemColors.Control
			control.ForeColor = SystemColors.ControlText
		ElseIf value = "school" Then
			control.BackColor = Color.Red
			control.ForeColor = Color.Yellow
		ElseIf value = "vrij" Then
			control.BackColor = Color.Lime
			control.ForeColor = Color.Black
		ElseIf value = "studie" Then
			control.BackColor = Color.Aqua
			control.ForeColor = Color.Black
		ElseIf value = "sport" Then
			control.BackColor = Color.Blue
			control.ForeColor = Color.Yellow
		ElseIf value = "eten" Then
			control.BackColor = Color.Blue
			control.ForeColor = Color.Yellow
		ElseIf value = "muziek" Then
			control.BackColor = Color.Blue
			control.ForeColor = Color.Yellow
		ElseIf value = "hobby" Then
			control.BackColor = Color.Blue
			control.ForeColor = Color.Yellow
		ElseIf value = "werk" Then
			control.BackColor = Color.Blue
			control.ForeColor = Color.Yellow
		End If
	End Sub
End Class




Bijlage  TextBoxColors.png   30,37K   5 downloads

Code (VS 2019): Bijlage  ControlArrayApp.zip   12,02K   0 downloads

#3 fvangrieken

fvangrieken

    Starting Developer

  • Leden
  • 23 berichten
    Laatst bezocht 26 aug 2020 15:50

Geplaatst op 18 april 2020 - 10:19

Bedankt Guru Developer,

Dit ziet er goed uit. Ik ga dit in het weekend uitporberen.

Nogmaals, mijn dank

#4 fvangrieken

fvangrieken

    Starting Developer

  • Leden
  • 23 berichten
    Laatst bezocht 26 aug 2020 15:50

Geplaatst op 28 april 2020 - 11:23

Beste Guru Developer,

Ik heb toch nog een vraag. Hoewel je een mooi voorbeeld hebt gemaakt was de kern van mij vraag:

Hoe kan ik een loop maken met tekstboxen?

Bijvoorbeeld, een simpele loop die niet zal werken:

Private sub leegmaken

Dim tel as integer
tel = 1

For tel = 1 to 30
   TextBox(tel).Text = “”
tel = tel + 1

Next tel
End sub
Hoop dat hier een simpee oplossing voor is.

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1202 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 28 april 2020 - 21:34

Bericht bekijkenfvangrieken, op 28 april 2020 - 11:23, zei:

Beste Guru Developer,

Ik heb toch nog een vraag. Hoewel je een mooi voorbeeld hebt gemaakt was de kern van mij vraag:

Hoe kan ik een loop maken met tekstboxen?
Hoop dat hier een simpee oplossing voor is.

Beste starting developer,

.NET heeft geen control arrays.
Erg is dat niet want je hebt ze eigenlijk niet nodig.
Er zijn veel betere alternatieven.

Dit doet wat jouw code doet (in de veronderstelling dat de TextBoxen op panel staan)

Visual Basic Code:
For index = 1 To 30
TryCast(panel.Controls($"TextBox{index}"), TextBox)?.Clear()
Next


Alleen kan dat veel efficiënter, duidelijker, robuuster en flexibeler met een andere benadering dan de classic vb benadering.

Bijvoorbeeld: alle TextBoxen in een Control (panel) ophalen als een List(Of TextBox):
Visual Basic Code:
Dim list = panel.Controls.OfType(Of TextBox).ToList

' Als je ze wil nu wil leegmaken:

list.ForEach(Sub (box) box.Clear)





#6 fvangrieken

fvangrieken

    Starting Developer

  • Leden
  • 23 berichten
    Laatst bezocht 26 aug 2020 15:50

Geplaatst op 29 april 2020 - 11:14

Beste Guru Developer,

Bedankt nogmaals.
Ik had de tekstboxen niet in een panel geplaatst.
Ik heb een nieuw form gemaakt, een panel geplaatst en tekstboxen daarin om het uit te proberen.
Dit werkt inderdaad prima. Eerlijk gezegd snap ik de code niet voor 100% maar dat ga ik proberen uit te zoeken.

Bedankt voor deze voorbeelden!!

#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1202 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 29 april 2020 - 20:58

Bericht bekijkenfvangrieken, op 29 april 2020 - 11:14, zei:

Beste Guru Developer,
Dat is niet mijn naam, dat is een titel die dit forum (ongelukkig genoeg) zelf toevoegt.
Ik vind ook niet waar ik het kan wijzigen (vroeger kon dat wel?).


Je vraag komt om de zoveel tijd terug in een of andere vorm terug.
Bijvoorbeeld (en er zijn er nog)

Meerdere Textboxen Kleur Wijzigen
Variabelen In Objectnaam
Controls Toevoegen Aan Een Form

#8 fvangrieken

fvangrieken

    Starting Developer

  • Leden
  • 23 berichten
    Laatst bezocht 26 aug 2020 15:50

Geplaatst op 01 mei 2020 - 11:33

Best Dirk,
Bedankt voor de aanwijzingen en hulp tot nu toe. Ik ben er echt mee vooruit geholpen.
Ik heb de veranderde TextBox kleuren nu beter en simpeler kunnen programmeren!
Alleen voor het eenvoudiger wegschrijven en ophalen naar en uit de Acces database heb ik nog geen goede oplossing. Ik krijg het wel voor elkaar maar vind de manier te omslachtig. Heb mijn manier hieronder gezet. Misschien dat je ook hiervoor een beter oplossing weet.

   PrivateSub laden()
    'gegevens maandag
    TextBox22.Text = ds.Tables("Oefeningen").Rows(0).Item(1) & ""
    TextBox23.Text = ds.Tables("Oefeningen").Rows(0).Item(2) & ""
    TextBox24.Text = ds.Tables("Oefeningen").Rows(0).Item(3) & ""
    TextBox25.Text = ds.Tables("Oefeningen").Rows(0).Item(4) & ""
    TextBox26.Text = ds.Tables("Oefeningen").Rows(0).Item(5) & ""
    ‘enz….

    TextBox220.Text = ds.Tables("Oefeningen").Rows(13).Item(12) & ""
    TextBox219.Text = ds.Tables("Oefeningen").Rows(13).Item(13) & ""
     TextBox218.Text = ds.Tables("Oefeningen").Rows(13).Item(14) & ""
    EndSub
    
    PrivateSub OpslaanGeel()
    sql = "SELECT * FROM Opgegeven"
    da = New OleDb.OleDbDataAdapter(sql, con)

    Dim cb AsNew OleDb.OleDbCommandBuilder(da).

    'update maandag
    ds.Tables("Oefeningen").Rows(0).Item(1) = TextBox22.Text & ""
    ds.Tables("Oefeningen").Rows(0).Item(2) = TextBox23.Text & ""
    ds.Tables("Oefeningen").Rows(0).Item(3) = TextBox24.Text & ""
    ‘Enz….

    ds.Tables("Oefeningen").Rows(13).Item(3) = TextBox229.Text & ""
    ds.Tables("Oefeningen").Rows(13).Item(2) = TextBox230.Text & ""
    ds.Tables("Oefeningen").Rows(13).Item(1) = TextBox231.Text & ""

    da.Update(ds, "Oefeningen")

    EndSub

Met vriendelijke groeten,
Frans

#9 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1202 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 01 mei 2020 - 18:48

View Postfvangrieken, on 01 mei 2020 - 11:33, said:

Alleen voor het eenvoudiger wegschrijven en ophalen naar en uit de Acces database heb ik nog geen goede oplossing. Ik krijg het wel voor elkaar maar vind de manier te omslachtig. Heb mijn manier hieronder gezet. Misschien dat je ook hiervoor een beter oplossing weet.

Waarschijnlijk wel, maar daarvoor heb ik meer info nodig over de structuur:
Indeling rijen en kolommen van de data én het geheim achter de naamgeving van de TextBoxen.

Verder vraag ik me al van je eerste post af of TextBox wel de juiste control is voor het geen je wil doen.





Ook met taq VS 2015, VS2015, Textbox loop voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)