Click here to Skip to main content
15,891,777 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hi,

How can I read all the text properties of all the textboxes and controlboxes on my form?
Wy does the folowing not work?

VB
For Each cntrl In Me.Controls
     If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
         FileString &= cntrl.Text & ","
     End If
 Next



Alternatively:
Can I easely insert the names of the controls in my code (I have about 30 controls). They are a mix of textboxes and comboboxes. I want to use the selected text to build a commma seperated string.

Kind regards,
Posted
Updated 13-Jun-13 20:55pm
v2
Comments
Surendra Adhikari SA 14-Jun-13 4:48am    
what error did you get from your code above?

Hi Gert,


Try this :

VB
For Each cntrl In Me.Controls
     If TypeOf cntrl Is TextBox Then
         FileString &= cntrl.Text & ","
     End If
     If TypeOf cntrl Is ComboBox Then
         FileString &= cntrl.SelectedValue.ToString & ","
     End If
 Next



BR,
VG
 
Share this answer
 
v3
Comments
Gert Smets 14-Jun-13 7:01am    
doesn't work either...

Maybe the problem is elsewhere. I have a combobox "Preset_naamCombobox" that lets me select a preset value for several other comboboxes and textboxes. All is saved in a list "ListPreset" and then saved in a comma seperated textfile. The files stay empty and when selecting a preset I get an error that the index is not valid.

Imports Microsoft.Office.Interop
Imports System.IO 'Required for StreamReader & StreamWriter



Public Class appointmentcreator_form

Dim myReader As StreamReader
Dim myWriter As StreamWriter
Dim listPreset As New List(Of String)
Dim PresetName As String

Private Sub appointmentcreator_form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

My.Settings.Reload()
Preset_naamComboBox.Items.Add("<save as="" preset="">")
Call ReadData()
SaveFileDialog1.DefaultExt = "txt"

cbxPeriodDays.SelectedIndex() = 0
cbxPeriodHr.SelectedIndex() = 0
cbxPeriodMin.SelectedIndex() = 0
CbxdaysAfterFirst.SelectedIndex() = 0
cbxHrAfterFirst.SelectedIndex() = 0
cbxMinAfterFirst.SelectedIndex() = 0
cbxStartMin.SelectedIndex() = 0
cbxStartHr.SelectedIndex() = 0
tbxSubject.Focus()

End Sub

Private Sub Preset_naamComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Preset_naamComboBox.SelectedIndexChanged
If Preset_naamComboBox.SelectedIndex = 0 Then
'Ask for Preset Name
Again: PresetName = InputBox("Name Your PreSet then click OK", "Preset", "Preset#1", 300, 200)
If PresetName = "" Or PresetName.Contains(",") Then
MsgBox("Invalid Preset Name!" & vbCrLf & "Re-Enter Name!")
GoTo Again
Else
Preset_naamComboBox.Items.Add(PresetName)
Call SaveData(PresetName)
End If
Else
'Get Preset Values and load in TextBoxes
PresetName = CStr(Preset_naamComboBox.Items.Item(Preset_naamComboBox.SelectedIndex))
Dim txtLine() As String = Split(listPreset.Item(Preset_naamComboBox.SelectedIndex - 1), ",")
Dim index As Integer = 1
For Each cntrl In Me.Controls
If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
cntrl.text = txtLine(index)
index += 1
End If
Next
End If
End Sub
Sub ReadData()
If My.Settings.Filepath <> "" Then
If My.Computer.FileSystem.FileExists(My.Settings.Filepath) = True Then
myReader = New StreamReader(My.Settings.Filepath)
Dim myText = myReader.ReadLine
While myText IsNot Nothing
listPreset.Add(myText)
myText = myReader.ReadLine
End While
myReader.Close()
'Add Preset Names to ComboBox, take first part of each line until first ","
If listPreset.Count > 0 Then
Dim PresetName As String
Dim index As Integer
For i = 0 To listPreset.Count - 1
index = listPreset.Item(i).IndexOf(",")
PresetName = LSet(listPreset.Item(i), index)
Preset_naamComboBox.Items.Add(PresetName)
Next
End If
Else
My.Settings.Filepath = ""
End If
End If
End Sub
Sub SaveData(ByVal PresetName As String)
Dim FileString As String = PresetName & ","
'Build File String with TextBox Data
For Each cntrl In Me.Controls
If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
FileString &= cntrl.selectedvalue.ToString & ","
End If
Next

'Check if FilePath exists
If My.Settings.Filepath = "" Then
sorry, the comment could not show the entire code.
Maybe this helps.

VB
Imports Microsoft.Office.Interop
Imports System.IO 'Required for StreamReader & StreamWriter

Public Class appointmentcreator_form

    Dim myReader As StreamReader
    Dim myWriter As StreamWriter
    Dim listPreset As New List(Of String)
    Dim PresetName As String

    Private Sub appointmentcreator_form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        My.Settings.Reload()
        Preset_naamComboBox.Items.Add("<save as="" preset="">")
        Call ReadData()
        SaveFileDialog1.DefaultExt = "txt"

        cbxPeriodDays.SelectedIndex() = 0
        cbxPeriodHr.SelectedIndex() = 0
        cbxPeriodMin.SelectedIndex() = 0
        CbxdaysAfterFirst.SelectedIndex() = 0
        cbxHrAfterFirst.SelectedIndex() = 0
        cbxMinAfterFirst.SelectedIndex() = 0
        cbxStartMin.SelectedIndex() = 0
        cbxStartHr.SelectedIndex() = 0
        tbxSubject.Focus()

    End Sub

    Private Sub Preset_naamComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Preset_naamComboBox.SelectedIndexChanged
        If Preset_naamComboBox.SelectedIndex = 0 Then
            'Ask for Preset Name
Again:      PresetName = InputBox("Name Your PreSet then click OK", "Preset", "Preset#1", 300, 200)
            If PresetName = "" Or PresetName.Contains(",") Then
                MsgBox("Invalid Preset Name!" & vbCrLf & "Re-Enter Name!")
                GoTo Again
            Else
                Preset_naamComboBox.Items.Add(PresetName)
                Call SaveData(PresetName)
            End If
        Else
            'Get Preset Values and load in TextBoxes
            PresetName = CStr(Preset_naamComboBox.Items.Item(Preset_naamComboBox.SelectedIndex))
            Dim txtLine() As String = Split(listPreset.Item(Preset_naamComboBox.SelectedIndex - 1), ",")
            Dim index As Integer = 1
            For Each cntrl In Me.Controls
                If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
                    cntrl.text = txtLine(index)
                    index += 1
                End If
            Next
        End If
    End Sub
    Sub ReadData()
        If My.Settings.Filepath <> "" Then
            If My.Computer.FileSystem.FileExists(My.Settings.Filepath) = True Then
                myReader = New StreamReader(My.Settings.Filepath)
                Dim myText = myReader.ReadLine
                While myText IsNot Nothing
                    listPreset.Add(myText)
                    myText = myReader.ReadLine
                End While
                myReader.Close()
                'Add Preset Names to ComboBox, take first part of each line until first ","
                If listPreset.Count > 0 Then
                    Dim PresetName As String
                    Dim index As Integer
                    For i = 0 To listPreset.Count - 1
                        index = listPreset.Item(i).IndexOf(",")
                        PresetName = LSet(listPreset.Item(i), index)
                        Preset_naamComboBox.Items.Add(PresetName)
                    Next
                End If
            Else
                My.Settings.Filepath = ""
            End If
        End If
    End Sub
    Sub SaveData(ByVal PresetName As String)
        Dim FileString As String = PresetName & ","
        'Build File String with TextBox Data
        For Each cntrl In Me.Controls
            If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
                FileString &= cntrl.selectedvalue.ToString & ","
            End If
        Next

        'Check if FilePath exists
        If My.Settings.Filepath = "" Then
            If SaveFileDialog1.ShowDialog = DialogResult.OK Then
                My.Settings.Filepath = SaveFileDialog1.FileName
                My.Settings.Save()
                Call SaveFile()
            Else
                MsgBox("Save File Aborted" & vbCrLf & "Preset " & PresetName & " NOT saved")
                'Remove Preset from ComboBox and Preset List
                Preset_naamComboBox.Items.RemoveAt(Preset_naamComboBox.Items.Count - 1)
                listPreset.RemoveAt(listPreset.Count - 1)
            End If
        Else
            Call SaveFile()
        End If
    End Sub
    Sub SaveFile()
        myWriter = New StreamWriter(My.Settings.Filepath)
        For i = 0 To listPreset.Count - 1
            myWriter.WriteLine(listPreset.Item(i))
        Next
        myWriter.Close()
        MsgBox("Preset:  " & PresetName & " saved" & vbCrLf & "To File: " & My.Settings.Filepath)
    End Sub</save>
 
Share this answer
 
Comments
_Vitor Garcia_ 14-Jun-13 7:16am    
Gert,

did you tested my solution ?

Just asking bcause your code :

For Each cntrl In Me.Controls
If TypeOf cntrl Is TextBox Or TypeOf cntrl Is ComboBox Then
FileString &= cntrl.selectedvalue.ToString & ","
End If
Next
is only partial for my solution.
please confirm u tested this for as this :

For Each cntrl In Me.Controls
If TypeOf cntrl Is TextBox Then
FileString &= cntrl.Text & ","
End If
If TypeOf cntrl Is ComboBox Then
FileString &= cntrl.SelectedValue.ToString & ","
End If
Next
Gert Smets 14-Jun-13 7:36am    
Sorry, yes I did tested it.
The file on disk stays empty.

Also, if I use this methode: how do I put the values back in the text/comboboxes in the whright order when reading from disk?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900