Reputation: 93
I am working on an app and in one of the functions I want to implement either selecting source and destination folder with browsing My computer or just copy paste the path in Textbox and thus producing a variable for later use
If path is selected while browsing folders I want the selected path to be shown in a Textbox.
While running the GUI I get an error: "You cannot call a method on a null-valued expression" in line where I wan't to show selected folder in a Text Box. I tested the part of the script that opens My computer browsing and that part produces a variable if run separately, but I have a feeling that when run in the complete code I don't get a variable out. Am I thinking correctly and how can I fix that?
##########################################################################
# Variables
##########################################################################
# Language variables
$main_form_title_text = "File renaming app"
$info_text_source_folder = "Select source folder or paste it below"
$Source_folder_button_text = "Sel. source folder"
$info_text_destination_folder = "Select dest. folder or paste it below"
$Destination_folder_button_text = "Sel. dest. folder"
##########################################################################
# Load forms
##########################################################################
add-type -AssemblyName system.windows.forms
add-type -assemblyname system.drawing
##########################################################################
# Main Window Form
##########################################################################
$main_form = New-Object System.Windows.Forms.Form
$main_form.Text = $main_form_title_text
$main_form.TopMost = $true
$main_form.icon=$icon
$main_form.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,255)
$main_form.Size = New-Object System.Drawing.Size(450,525)
##########################################################################
# Source folder selection instructions
##########################################################################
$infosource = New-Object System.Windows.Forms.label
$infosource.Location = New-Object System.Drawing.Size(10,45)
$infosource.Size = New-Object System.Drawing.Size(200,15)
$infosource.BackColor = "Transparent"
$infosource.ForeColor = "black"
$infosource.Text = $info_text_source_folder
$main_form.Controls.Add($infosource)
##########################################################################
# Select source folder button
##########################################################################
$Select_source_folder = New-Object System.Windows.Forms.Button
$Select_source_folder.Location = New-Object System.Drawing.Size(230,40)
$Select_source_folder.Size = New-Object System.Drawing.Size(120,25)
$Select_source_folder.Text = $Source_folder_button_text
$main_form.Controls.Add($Select_source_folder)
$Select_source_folder.Add_Click({
Add-Type -AssemblyName System.Windows.Forms
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
[void]$FolderBrowser.ShowDialog()
$source = $FolderBrowser.SelectedPath
$sourceinfo.items.insert(0, $source)
})
############################################################################
# Source folder textbox/info
############################################################################
$sourceinfo = New-Object Windows.Forms.Textbox
$sourceinfo = New-Object System.Windows.Forms.Textbox
$sourceinfo.Location = New-Object System.Drawing.Size(10,70)
$sourceinfo.Size = New-Object System.Drawing.Size(340,25)
$main_form.Controls.Add($sourceinfo)
##########################################################################
# Source folder selection instructions
##########################################################################
$infosource = New-Object System.Windows.Forms.label
$infosource.Location = New-Object System.Drawing.Size(10,115)
$infosource.Size = New-Object System.Drawing.Size(200,15)
$infosource.BackColor = "Transparent"
$infosource.ForeColor = "black"
$infosource.Text = $info_text_destination_folder
$main_form.Controls.Add($infosource)
##########################################################################
# Select destination folder button
##########################################################################
$Select_destination_folder = New-Object System.Windows.Forms.Button
$Select_destination_folder.Location = New-Object System.Drawing.Size(230,110)
$Select_destination_folder.Size = New-Object System.Drawing.Size(120,25)
$Select_destination_folder.Text = $Destination_folder_button_text
$main_form.Controls.Add($Select_destination_folder)
$Select_destination_folder.Add_Click({
Add-Type -AssemblyName System.Windows.Forms
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
[void]$FolderBrowser.ShowDialog()
$destination = $FolderBrowser.SelectedPath
$destinationinfo.items.insert(0, $destination)
})
############################################################################
# Destination folder textbox/info
############################################################################
$destinationinfo = New-Object Windows.Forms.Textbox
$destinationinfo = New-Object System.Windows.Forms.Textbox
$destinationinfo.Location = New-Object System.Drawing.Size(10,140)
$destinationinfo.Size = New-Object System.Drawing.Size(340,25)
$main_form.Controls.Add($destinationinfo)
##########################################################################
# Start form
##########################################################################
[void]$main_form.ShowDialog()
Upvotes: 0
Views: 1303
Reputation: 2434
Change the line
$sourceinfo.items.insert(0, $source)
to
$sourceinfo.Text = $source
Upvotes: 1