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

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

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

Author24 — интернет-сервис помощи студентам
Товарищи, доброго времени суток, есть скрипт, данные в него заносятся с помощью форм. Конструктор формы взят в 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2018, 14:18
Ответы с готовыми решениями:

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

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

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

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

11
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
03.10.2018, 14:45 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
v_svitere, $Form.close не подходит, так как следом идут еще формы и скрипт не завершается.

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

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

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

Спасибо огромное!!!!
0
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
03.10.2018, 14:59 4
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  [ТС] 5
v_svitere, Ну смотрите. у меня идет ввод данных в скрипт через формы, конструктор Вы видели.

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


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

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

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

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

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

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

Ну раз про такие подходы пишут статьи, значит они имеет право на жизнь, однако мне это немного режет глаз.
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 815
04.10.2018, 18:18 12
Причем скажем, если мы скроем окно хоста, то код после оконного диалога, будет неуправляемым. - почитайте про 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
04.10.2018, 18:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2018, 18:18
Помогаю со студенческими работами здесь

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

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

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

Действие при нажатии кнопки <retry> и <cancel>
Доброй ночи. Есть код: format PE GUI 4.0 include 'win32ax.inc' .data ...

Confirm - при нажатии на cancel объект всё равно удаляется
Всем добрый вечер, Помогите пожалуйста найти решение по такому вопросу: При нажатии на...

Заблокировать кнопку до окончания выполнения скрипта
Здравствуйте! У меня есть два объекта. При онклике выполняется php скрипт в результате которого...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru