You could possibly use the DataGridView control.
The attached picture 1 shows what it could look like when used in addition to the ComboBox and the whole code behind it is this:
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load
ComboBox1.Items.Clear()
Dim MyStrings() As String = EthernetIPforCLXCom1.Read("Controller_Tag_String", 20)
For index = 0 To MyStrings.Length - 1
ComboBox1.Items.Add(MyStrings(index))
Next
Me.dgvTags.RowCount = 21
Me.dgvTags.ColumnCount = 2
Me.dgvTags.AllowUserToOrderColumns = False
Me.dgvTags.AllowUserToAddRows = False
Me.dgvTags.AllowUserToDeleteRows = False
Me.dgvTags.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.dgvTags.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Me.dgvTags.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
Me.dgvTags.Columns(0).HeaderCell.Value = "String Array"
Me.dgvTags.Columns(0).ReadOnly = True
Me.dgvTags.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.dgvTags.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Me.dgvTags.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
Me.dgvTags.Columns(1).HeaderCell.Value = "Value"
For i As Integer = 0 To 19
Me.dgvTags.Rows(i).Cells(0).Value = "Controller_Tag_String[" & i.ToString & "]"
Me.dgvTags.Rows(i).Cells(1).Value = MyStrings(i).ToString
Next
Dim btnColumn As DataGridViewButtonColumn = New DataGridViewButtonColumn
btnColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
btnColumn.HeaderText = "Apply"
btnColumn.Text = "Apply"
btnColumn.SortMode = DataGridViewColumnSortMode.NotSortable
btnColumn.UseColumnTextForButtonValue = True
btnColumn.DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Regular)
Me.dgvTags.Columns.Add(btnColumn)
End Sub
Private Sub dgvTags_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTags.CellClick
If e.ColumnIndex = 2 Then
Dim valueToWrite As String
If e.RowIndex >= 0 Then
If Me.dgvTags.Rows(e.RowIndex).Cells(1).Value Is Nothing Then 'Delete current string
valueToWrite = ""
Else
valueToWrite = Me.dgvTags.Rows(e.RowIndex).Cells(1).Value 'Replace current string
End If
Me.EthernetIPforCLXCom1.Write(Me.dgvTags.Rows(e.RowIndex).Cells(0).Value, valueToWrite)
Me.ComboBox1.Items.Item(e.RowIndex) = valueToWrite
End If
End If
End Sub
Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
EthernetIpForCLXCom1.Write("Current_Job", ComboBox1.Text)
End Sub
The attached picture 2 shows what it could look like when used instead of the ComboBox and the whole code behind it is this:
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim MyStrings() As String = EthernetIPforCLXCom1.Read("Controller_Tag_String", 20)
Me.dgvTags.RowCount = 21
Me.dgvTags.ColumnCount = 3
Me.dgvTags.AllowUserToOrderColumns = False
Me.dgvTags.AllowUserToAddRows = False
Me.dgvTags.AllowUserToDeleteRows = False
Me.dgvTags.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.dgvTags.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Me.dgvTags.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
Me.dgvTags.Columns(0).HeaderCell.Value = "String Array"
Me.dgvTags.Columns(0).ReadOnly = True
Me.dgvTags.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.dgvTags.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Me.dgvTags.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
Me.dgvTags.Columns(1).HeaderCell.Value = "Value"
Me.dgvTags.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.dgvTags.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Me.dgvTags.Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
Me.dgvTags.Columns(2).HeaderCell.Value = "Write To Tag"
For i As Integer = 0 To 19
Me.dgvTags.Rows(i).Cells(0).Value = "Controller_Tag_String[" & i.ToString & "]"
Me.dgvTags.Rows(i).Cells(1).Value = MyStrings(i).ToString
Next
Dim btnColumn As DataGridViewButtonColumn = New DataGridViewButtonColumn
btnColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
btnColumn.HeaderText = "Apply"
btnColumn.Text = "Apply"
btnColumn.SortMode = DataGridViewColumnSortMode.NotSortable
btnColumn.UseColumnTextForButtonValue = True
btnColumn.DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Regular)
Me.dgvTags.Columns.Add(btnColumn)
End Sub
Private Sub dgvTags_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTags.CellClick
If e.ColumnIndex = 3 Then
Dim valueToWrite As String
If e.RowIndex >= 0 Then
If Me.dgvTags.Rows(e.RowIndex).Cells(1).Value Is Nothing Then 'Delete current string
valueToWrite = ""
Else
valueToWrite = Me.dgvTags.Rows(e.RowIndex).Cells(1).Value 'Replace current string
End If
Me.EthernetIPforCLXCom1.Write(Me.dgvTags.Rows(e.RowIndex).Cells(0).Value, valueToWrite)
If Not (String.IsNullOrWhiteSpace(Me.dgvTags.Rows(e.RowIndex).Cells(2).Value)) Then
Me.EthernetIPforCLXCom1.Write(Me.dgvTags.Rows(e.RowIndex).Cells(2).Value, valueToWrite)
End If
End If
End If
End Sub
You would need to replace all of the "Controller_Tag_String" text with the name of your string array.
You might also need to replace all of the "dgvTags" text with the name of your DataGridView control (whatever name you might give it once you add it to the form, the easiest option being to name it dgvTags).
If you research the DataGridView control then you could customize its features further.