Here we'll continue with the program from example 09.

We have two checkboxes that can both affect the same content at any moment. That's why, when one gets checked, we have to be take into consideration whether the other was also checked.

For the sake of space I'll only show the code that we will be changing. Full code at the bottom.

Code for checkbox1:


Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If c1 = 0 Then
    Exit Sub
    End If

    ReDim bb2(0 To TextBox1.Lines.Count - 1)
    For d = 0 To TextBox1.Lines.Count - 1
    bb2(d) = TextBox1.Lines(d)
    Next

    TextBox1.Clear()

    If CheckBox1.Checked Then
    If CheckBox2.Checked Then
    ElseIf CheckBox2.Checked = False Then
    End If
    End If

    If CheckBox1.Checked = False Then
    If CheckBox2.Checked Then
    ElseIf CheckBox2.Checked = False Then
    End If
    End If

    End Sub


If CheckBox1.Checked Then
If CheckBox2.Checked Then
-> checkbox2 is checked, now we click on checkbox1 to turn it on. Add this right below:
For Each d In bb2
d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
Next

Before reaching this point, the content of textbox wash change by checkbox2, so we need to take it from the textbox and use it. That's why we use "bb2", not "bb". This lines were already used in example 08. They remove the folder path and the "/" sign.

ElseIf CheckBox2.Checked = False Then
Add this right below:
For Each d In bb
d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
Next

-> the content wasn't changed by checkbox2, so we use "bb". We change the filename content directly from the loaded folder path.

If CheckBox1.Checked = False Then
If CheckBox2.Checked Then

-> we uncheck checkbox1, while checkbox2 is checked. Here we have to apply the main change checkbox2 creates to the content of "bb". Add this:

For Each d In bb
If d.Contains("~") = False Then
TextBox1.Text += d & vbNewLine
End If
Next

If d.Contains("~")    - "d" is a variable name. "contains" is a function looking for user specified text or signs inside a line of text. We will be looking for a "~" sign in every line of "bb".
-> our code does this: If "~" is present, then don't add "d" to the textbox. This way we remove files with a ~ sign from the list.

ElseIf CheckBox2.Checked = False Then
-> if we uncheck checkbox1 and checkbox2 is already unchecked. Return to the very beginning. Add:
For Each d In bb
TextBox1.Text = TextBox1.Text & d & vbNewLine
Next

Code for checkbox2:


Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    If c1 = 0 Then
    Exit Sub
    End If

    ReDim bb2(0 To TextBox1.Lines.Count - 1)
    For d = 0 To TextBox1.Lines.Count - 1
    bb2(d) = TextBox1.Lines(d)
    Next

    TextBox1.Clear()

    If CheckBox2.Checked Then
    If CheckBox1.Checked Then
    ElseIf CheckBox1.Checked = False Then
    End If
    End If

    If CheckBox2.Checked = False Then
    If CheckBox1.Checked Then
    ElseIf CheckBox1.Checked = False Then
    End If
    End If

    End Sub


If CheckBox2.Checked Then
If CheckBox1.Checked Then
Add this right below:
For Each d In bb2
If d.Contains("~") = False Then
TextBox1.Text += d & vbNewLine
End If
Next

-> since the content was changed by checkbox1, we will then have to use "bb2". Removing names with a tilde sign is the main work of this checkbox.

ElseIf CheckBox1.Checked = False Then
Add this:
For Each d In bb
If d.Contains("~") = False Then
TextBox1.Text += d & vbNewLine
End If
Next

-> changing the main content, using "bb"

If CheckBox2.Checked = False Then
If CheckBox1.Checked Then
Add this:
For Each d In bb
d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
TextBox1.Text += Replace(d, "\", "") & vbNewLine
Next

-> unchecking checkbox2 while checkbox1 is still turned on. Returning the content back to filenames only (no folder paths).

ElseIf CheckBox1.Checked = False Then
Add this:
For Each d In bb
TextBox1.Text = TextBox1.Text & d & vbNewLine
Next

-> returning content back to the very beginning

At this moment, when we load a folder, if any of the checkboxes are checked, the changes will not be applied to the list directly. We have to change that.
Inside button1, right between "next" and "end if", add this:
If CheckBox1.Checked Then
CheckBox1_CheckedChanged(sender, e)
End If
If CheckBox2.Checked Then
CheckBox2_CheckedChanged(sender, e)
End If

Final code:

    Imports System.IO

    Public Class Form1

    Private bb As String()
    Private bb2() As String
    Private c1 As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim d As String
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    c1 = 1
    Label1.Text = FolderBrowserDialog1.SelectedPath
    bb = Directory.GetFiles(FolderBrowserDialog1.SelectedPath, "*.*")
    TextBox1.Clear()
    For Each d In bb
    TextBox1.Text = TextBox1.Text & d & vbNewLine
    Next
   
    If CheckBox1.Checked Then
    CheckBox1_CheckedChanged(sender, e)
    End If
    If CheckBox2.Checked Then
    CheckBox2_CheckedChanged(sender, e)
    End If

    End If
    End Sub

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If c1 = 0 Then
    Exit Sub
    End If

    ReDim bb2(0 To TextBox1.Lines.Count - 1)
    For d = 0 To TextBox1.Lines.Count - 1
    bb2(d) = TextBox1.Lines(d)
    Next

    TextBox1.Clear()

    If CheckBox1.Checked Then
    If CheckBox2.Checked Then
    For Each d In bb2
    d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
    TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
    Next

    ElseIf CheckBox2.Checked = False Then
    For Each d In bb
    d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
    TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
    Next
    End If
    End If

    If CheckBox1.Checked = False Then
    If CheckBox2.Checked Then
    For Each d In bb
    If d.Contains("~") = False Then
    TextBox1.Text += d & vbNewLine
    End If
    Next

    ElseIf CheckBox2.Checked = False Then
    For Each d In bb
    TextBox1.Text = TextBox1.Text & d & vbNewLine
    Next
    End If
    End If

    End Sub

    Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    If c1 = 0 Then
    Exit Sub
    End If

    ReDim bb2(0 To TextBox1.Lines.Count - 1)
    For d = 0 To TextBox1.Lines.Count - 1
    bb2(d) = TextBox1.Lines(d)
    Next

    TextBox1.Clear()

    If CheckBox2.Checked Then
    If CheckBox1.Checked Then
    For Each d In bb2
    If d.Contains("~") = False Then
    TextBox1.Text += d & vbNewLine
    End If
    Next

    ElseIf CheckBox1.Checked = False Then
    For Each d In bb
    If d.Contains("~") = False Then
    TextBox1.Text += d & vbNewLine
    End If
    Next
    End If
    End If

    If CheckBox2.Checked = False Then
    If CheckBox1.Checked Then
    For Each d In bb
    d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
    TextBox1.Text += Replace(d, "\", "") & vbNewLine
    Next

    ElseIf CheckBox1.Checked = False Then
    For Each d In bb
    TextBox1.Text = TextBox1.Text & d & vbNewLine
    Next
    End If
    End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    TextBox1.Clear()
    Label1.Text = "No Folder Selected"
    c1 = 0
    CheckBox1.Checked = False
    CheckBox2.Checked = False
    End Sub

    End Class


Start the program. Check various combinations of checkboxes after loading files.
Turn the checkboxes on, then load a folder.


Shortening the code

There's a lot of repetition inside the current code. Removing the unnecessary code lines once the programing is over is just a logical game.
Repetition and redundancy should always be avoided as much as possible even if the program is functional.

Shortened code:

    Imports System.IO

    Public Class Form1

    Private bb As String()
    Private bb2() As String
    Private c1 As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    c1 = 1
    Label1.Text = FolderBrowserDialog1.SelectedPath
    bb = Directory.GetFiles(FolderBrowserDialog1.SelectedPath, "*.*")
    CheckBox1_CheckedChanged(sender, e)
    End If
    End Sub

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If c1 = 0 Then
    Exit Sub
    End If

    If CheckBox1.Checked Then
    If CheckBox2.Checked Then
    ReDim bb2(0 To TextBox1.Lines.Count - 1)
    For d = 0 To TextBox1.Lines.Count - 1
    bb2(d) = TextBox1.Lines(d)
    Next
    TextBox1.Clear()

    For Each d In bb2
    If d.Contains("~") = False Then
    d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
    TextBox1.Text += Replace(d, "\", "") & vbNewLine
    End If
    Next

    ElseIf CheckBox2.Checked = False Then
    TextBox1.Clear()
    For Each d In bb
    d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
    TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
    Next
    End If
    End If

    If CheckBox1.Checked = False Then
    TextBox1.Clear()
    If CheckBox2.Checked Then
    For Each d In bb
    If d.Contains("~") = False Then
    TextBox1.Text += d & vbNewLine
    End If
    Next

    ElseIf CheckBox2.Checked = False Then
    TextBox1.Clear()
    For Each d In bb
    TextBox1.Text = TextBox1.Text & d & vbNewLine
    Next
    End If
    End If

    End Sub

    Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    CheckBox1_CheckedChanged(sender, e)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    TextBox1.Clear()
    Label1.Text = "No Folder Selected"
    c1 = 0
    CheckBox1.Checked = False
    CheckBox2.Checked = False
    End Sub

    End Class


Checkbox1 contains all the possible checkbox choices now. It's enough to send the user there after clicking the load folder button and checkbox2 button.