Необходимо объявить переменные на основе ввода текстового поля после нажатия кнопки

Я пытаюсь создать графический интерфейс для сценария, который я написал некоторое время назад. У меня были небольшие проблемы с этим; Я хотел бы, чтобы кнопка «Отправить записи» регистрировала данные, введенные пользователем, и назначала их переменным ($ fromcompname, $ tocompname, $ userid). Я не уверен, нужна ли мне функция, которая извлекает ввод в текстовые поля и присваивает их этим переменным или тому, что заставит это работать.

Сама форма находится в xaml, которую я сделал в VS Pro, а затем переместил ее в код vs, поскольку я использую powershell для запуска этого скрипта. Появляется окно со всеми элементами. Я просто не уверен, как получить кнопку «отправить записи», чтобы регистрировать данные, введенные пользователем, и передать их остальной части сценария, чтобы включить кнопку «передача данных». Если есть вопрос, который вам нужно задать мне, чтобы лучше понять намерение, пожалуйста, сделайте это, я надеюсь найти ответ. Спасибо.

Код ниже:

Add-Type -AssemblyName PresentationFramework
#Builds the window/form for the GUI
[xml]$xaml = @"
<Window xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name = "Window" Title = "Profile Transfer" WindowStartupLocation = "CenterScreen"
        Width = "460" Height = "220" ShowInTaskbar = "True">
    <Grid Margin = "0,0,0,0" Background = "#FF3D0198">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width = "17*"/>
            <ColumnDefinition Width = "443*"/>
        </Grid.ColumnDefinitions>
        <Button x:Name = "subbttn" Content = "Submit Entries" HorizontalAlignment = "Left" Margin = "290,84,0,0" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "18"/>
        <Button x:Name = "transbttn" Content = "TRANSFER Data" HorizontalAlignment = "Left" Margin = "145,124,0,0" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "18"/>
        <TextBox HorizontalAlignment = "Left" Margin = "290,15,0,0" TextWrapping = "Wrap" Text = "Old PC" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>
        <TextBox HorizontalAlignment = "Left" Margin = "290,38,0,0" TextWrapping = "Wrap" Text = "New PC" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>
        <TextBox HorizontalAlignment = "Left" Margin = "290,61,0,0" TextWrapping = "Wrap" Text = "User ID" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>
        <Label x:Name = "fromlbl" Content = "What is the name of the Old PC?" HorizontalAlignment = "Left" Margin = "1,11,0,0" VerticalAlignment = "Top" Width = "202" Foreground = "White" FontFamily = "Times New Roman" Grid.Column = "1" Height = "24"/>
        <Label x:Name = "tolbl"Content = "What is the name of the New PC?" HorizontalAlignment = "Left" Margin = "1,34,0,0" VerticalAlignment = "Top" Foreground = "White" FontFamily = "Times New Roman" Grid.Column = "1" Height = "24" Width = "173"/>
        <Label x:Name = "uidlbl"Content = "What is the USER's ID?" HorizontalAlignment = "Left" Margin = "1,57,0,0" VerticalAlignment = "Top" Foreground = "White" FontFamily = "Times New Roman" Grid.Column = "1" Height = "24" Width = "126"/>
        <StatusBar Grid.Column = "1" Margin = "0,147,33,10"/>

    </Grid>
</Window>
"@
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)

#Declares the variables based on the Name input in the XAML elements
$subbttn = $window.FindName("subbttn")
$transbttn = $window.FindName("transbttn")
$fromlabel = $window.FindName("fromlbl")
$tolabel = $window.FindName("tolbl")
$useridlabel = $window.FindName("uidlbl")

#Declares the needed data based on the user's input in the Textboxes
$subbttn.Add_Click({
    $fromcompname = $fromlabel.Text
    $tocompname = $tolabel.Text
    $userid = $useridlabel.Text

    Write-Host "$fromcompname" "$tocompname" "$userid"
})

#Opens the path to the old PC and the new PC for Robocopy
Set-Item -path env:computername -Value "$fromcompname"
Set-Item -path env:computername -Value "$tocompname"

#Sets the clikc of the transfer data button to initiate the robocopy
$transbttn.Add_Click({
    #robocopy is more intelligent
    C:\windows\system32\Robocopy.exe "\\$fromcompname\c$\Users\$userid" "\\$tocompname\c$\Users\$userid" `
    "/XJ" "/MIR" "/PURGE"  `
    "/R:2" "/W:5" "/XA:SH" "/S" "/256" "/XF" "*.MP3" "desktop.ini" `
    "/XD" "AppData" "Contacts" "Downloads" "Links" "Music" "SapWorkDir" "Searches" "Tracing" "Remote Assistance Logs" "Saved Games"

    #ROBOCOPY NOTES

    #/XJ excludes Junction Directories, breaks the "Application Data" loop Robocopy has a bug with
    #/MIR Mirrors a directory tree
    #/PURGE Deletes destination files and directories that no longer exist in the source.
    #/S Copies subdirectories and excludes empty directories.
    #/R:0 Specifies the number of retries on failed copies
    #/W:0 Specifies the wait time between retries in seconds
    #/XF Excludes Files
    #/XD Excludes Directories
    #/COPY:DATSOU copies security permissions of folders
})

$window.ShowDialog()

Вы никогда не устанавливаете ссылку на свое текстовое поле, в которое пользователь должен вводить информацию. Вы создаете текстовое поле для старого компьютера, нового компьютера и идентификатора пользователя, а также создаете для них метки, затем создаете переменные для этих меток, но никогда для текстовых полей, связанных с каждым из них. В остальном, думаю, все в порядке.

TheMadTechnician 03.11.2022 23:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как прокомментировал TheMadTechnician, вам нужно настроить переменные для текстовых полей в вашем графическом интерфейсе, а не для меток.

Для этого вам также нужно будет дать имена этим текстовым полям, например:

<TextBox x:Name = "fromcompany" HorizontalAlignment = "Left" Margin = "290,15,0,0" TextWrapping = "Wrap" Text = "Old PC" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>
<TextBox x:Name = "tocompany" HorizontalAlignment = "Left" Margin = "290,38,0,0" TextWrapping = "Wrap" Text = "New PC" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>
<TextBox x:Name = "userid" HorizontalAlignment = "Left" Margin = "290,61,0,0" TextWrapping = "Wrap" Text = "User ID" VerticalAlignment = "Top" Width = "120" FontFamily = "Times New Roman" Grid.Column = "1" Height = "16"/>

а затем создайте переменные, чтобы иметь возможность ссылаться на них

$fromcompanyTB = $window.FindName("fromcompany")
$tocompanyTB   = $window.FindName("tocompany")
$useridTB      = $window.FindName("userid")

Внутри обработчиков событий Click() вам нужна область сценария, чтобы иметь возможность использовать эти переменные, иначе они будут просто переменными, локальными для блока сценария:

$subbttn.Add_Click({
    $script:fromcompname = $script:fromcompanyTB.Text
    $script:tocompname   = $script:tocompanyTB.Text
    $script:userid       = $script:useridlabelTB.Text

    Write-Host "$script:fromcompname  $script:tocompname  $script:userid"
})

То же самое касается $transbttn.Add_Click({})

Наконец, вам нужно поставить пробел перед Content= в двух последних <Label строках, иначе Xaml будет недействительным.

Хорошо, я попробую это, как только вернусь в свой офис в понедельник, и вернусь, если это не сработает. Спасибо вам обоим @TheMadTechnician за ваши ответы.

SammyD007 04.11.2022 20:27

Большое спасибо вам обоим, теперь это работает, и я могу хорошо выглядеть перед своими коллегами, ха-ха. Удачного дня!

SammyD007 07.11.2022 15:31

Другие вопросы по теме