Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 23

Остановка выполнения скрипта при нажатии на кнопку Cancel

03.10.2018, 14:18. Показов 9409. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, доброго времени суток, есть скрипт, данные в него заносятся с помощью форм. Конструктор формы взят в Microsoft.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
 
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Test'
$form.Size = New-Object System.Drawing.Size(300,160)
$form.StartPosition = 'CenterScreen'
 
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(40,70)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
 
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(170,70)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
 
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Edit'
$form.Controls.Add($label)
 
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
 
 
$form.Topmost = $true
 
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
 
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $x
}
Как сделать, чтобы при нажатии на кнопку Cancel скрипт прекращал свою работу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2018, 14:18
Ответы с готовыми решениями:

Принудительная остановка выполнения скрипта
Не знаю в какую тему писать так что пишу тут(не серчайте пожалуйста) В общем ситуация такая, имеется скрипт, в который не аккуратно...

Выполнения двух событий при нажатии на одну кнопку
Добрый день. Подскажите как реализовать кнопку "Добавить в корзину" как на ozon.ru (не реклама =)) Чтобы при нажатии на кнопки...

Запуск, остановка и возобновление выполнения скрипта
Добрый день. Есть главный модуль Lua - main.lua. Есть второй модуль - mod.lua, в нём находиться только одна процедура - mod(). В...

11
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
03.10.2018, 14:45
Лучший ответ Сообщение было отмечено skyline23 как решение

Решение

skyline23, вешаете на событие add_click нужное действие и все .

PowerShell
1
2
3
4
$CancelButton.add_click(
{
$form.close()
})
или

PowerShell
1
2
3
4
$CancelButton.add_click(
{
Stop-Process -Id $PID
})
1
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 23
03.10.2018, 14:53  [ТС]
v_svitere, $Form.close не подходит, так как следом идут еще формы и скрипт не завершается.

Stop-Process -Id $PID жестко конечно, но в целом то, что нужно.

А если например Exit, чтобы уж процесс не сбрасывать =) Я попробовал, но там критикал вылез))

Ладно, в целом нормально.

Спасибо огромное!!!!
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
03.10.2018, 14:59
skyline23,
$Form.close не подходит, так как следом идут еще формы и скрипт не завершается.
Не совсем понял, что имеется в виду, если напишите что именно как должно работать, постараюсь направить вас в нужное русло.

Добавлено через 3 минуты
А все понял...
У вас не совсем корректный код получается.
Вы сначала, отображаете контрол формы
PowerShell
1
$result = $form.ShowDialog()
А после завершения диалога выполняете еще код.
PowerShell
1
2
3
4
5
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $textBox.Text
$x
}
Это конечно работает, но это идеологически неверно
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 23
03.10.2018, 14:59  [ТС]
v_svitere, Ну смотрите. у меня идет ввод данных в скрипт через формы, конструктор Вы видели.

В случае первой из трех форм, если я ставлю команду $Form.close, то форма закрывается, но за ней по скрипту открывается следующая, а она бессмысленна без заполненной первой формы. По этому и нужно, чтобы завершался скрипт полностью при нажатии на кнопку Cancel. Как-то так =)


Не поверите, это с Microsoft взято: https://docs.microsoft.com/en-... wershell-6
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
03.10.2018, 15:03
skyline23,
В случае первой из трех форм, если я ставлю команду $Form.close, то форма закрывается, но за ней по скрипту открывается следующая, а она бессмысленна без заполненной первой формы. По этому и нужно, чтобы завершался скрипт полностью при нажатии на кнопку Cancel. Как-то так =)
Я думаю, здесь достаточно одной формы.
Просто нужно все грамотно организовать. Некоторые контролы вы можете сделать неактивными, и разблокировать их только после определенных событий.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 23
03.10.2018, 15:07  [ТС]
v_svitere, Там есть свои мульки, из-за чего на одной форме не все удобно делать. В целом, что мне нужно было, Вы подсказали. Спасибо Вам БОЛЬШОЕ!!!!
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
04.10.2018, 02:49
@v_svitere
`идеологически неверно` - пожалуйста объясните

Добавлено через 4 минуты
@skyline23 вы можете всегда синхронизировать повершелл с формой чтобы пока пользователь там чего нибудь не нажал чей callback делает `$form.Dispose()` ничего дальше скрипт не делал
при помощи `IWin32Window Interface` (System.Windows.Forms)
https://docs.microsoft.com/en-... work-4.7.2

напишите если надо подробнее объяснить
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
04.10.2018, 10:58
`идеологически неверно` - пожалуйста объясните
Дело в том, что в оконных приложениях, все логика должна быть описана внутри.
То есть весь функционал должен быть распределен по событиям и использоваться средствами диалога.
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
04.10.2018, 17:00
@v_svitere но ведь ничто не препятствует делать как угодно и по моему PS шовер пропагандирует (изо всех сил) http://www.jsnover.com/blog/

именно потому что множество вещей напр. remoting делать в forms или xaml /wpf неудобно / невозможно...

то есть надо данные запросить надо - форму нарисовал данные у пользователя собрал форму закрыл и погнал дальше - идеолочески был неправ?
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
04.10.2018, 17:25
skouzmine,
но ведь ничто не препятствует делать как угодно
Вы правы.

то есть надо данные запросить надо - форму нарисовал данные у пользователя собрал форму закрыл и погнал дальше
В целом подразумевается, что при создании GUI-приложения, мы отказываемся от консольного диалога. Например я так и делаю, если у меня есть отрисованное окно, то я скрываю окно хоста, а в данном случае получается, что у нас в решении и оконный диалог и консольный. Причем скажем, если мы скроем окно хоста, то код после оконного диалога, будет неуправляемым.

Ну раз про такие подходы пишут статьи, значит они имеет право на жизнь, однако мне это немного режет глаз.
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
04.10.2018, 18:18
Причем скажем, если мы скроем окно хоста, то код после оконного диалога, будет неуправляемым. - почитайте про IWin32Window

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Add-Type -TypeDefinition @" 
 
// "
using System;
using System.Windows.Forms;
public class Win32Window : IWin32Window
{
    private IntPtr _hWnd;
    private int _data;
 
    public int Data
    {
        get { return _data; }
        set { _data = value; }
    }
 
    public Win32Window(IntPtr handle)
    {
        _hWnd = handle;
    }
 
    public IntPtr Handle
    {
        get { return _hWnd; }
    }
}
 
"@ -ReferencedAssemblies 'System.Windows.Forms.dll'
 
$caller = new-object Win32Window -ArgumentList ([System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle)
 
# PromptAuto -  форма 
PromptAuto -Title $title -Message $message -caller $caller
# ждет
$result = $caller.Data
Write-Debug ("Result is : {0} ({1})" -f $Readable.Item($result),$result)
ну и т.д.

Добавлено через 8 минут
это был фрагмент чего то чем увлекался 5 - 3 назвад но оно все работает -- https://github.com/sergueik/powershell_ui_samples
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2018, 18:18
Помогаю со студенческими работами здесь

При нажатии на кнопку таймер запустить, после выполнения последней функции остановить
'Извиняюсь за дубляж темы, не знаю куда податься :-) Здравствуйте. Хочу сделать так- при нажатии на кнопку таймер запустить,...

Остановка движения персонажа по нажатии на кнопку
Нужно сделать чтобы игрок нажал на кнопку персонаж остановился и стоит пока игрок держит кнопку Если можно пожалуйста распишите если...

Остановка движения персонажа по нажатии на кнопку
Нужно чтобы игрок нажимал кнопку в переменной Stop чтобы персонаж в игре остановился и стоял пока игрок не отпустит кнопку пж если можно...

Как в JSP/JSTL написать сценарий выполнения определённого метода при нажатии на кнопку формы?
Есть стартовый успешно выполняемый JSP-файл: <%@ page import="dao.UsersDAO" %> <%@ page import="model.User" %> <%@ page...

Действие при нажатии кнопки <retry> и <cancel> окна MessageBox
Доброй ночи. Есть код: format PE GUI 4.0 include 'win32ax.inc' .data s_format db &quot;%u&quot;,0 .code ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru