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 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:If CheckBox2.Checked Then
For Each d In bb2
d = Replace(d, FolderBrowserDialog1.SelectedPath, "")
TextBox1.AppendText(Replace(d, "\", "") & vbNewLine)
NextBefore 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
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
NextIf 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
NextCode 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 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:If CheckBox1.Checked Then
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:If CheckBox1.Checked Then
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 IfFinal 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
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
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.