Ожидание действий пользователя - cansel

  • Автор темы Автор темы wizard
  • Дата начала Дата начала

wizard

Client
Регистрация
04.10.2011
Сообщения
1 056
Реакции
720
Баллы
113
Предлагаю в кубике Ожидание действий пользователя использовать выход по ошибке
Screenshot_21.jpg
сейчас можно только нажать продолжить, и выполнение пойдет дальше,
но на самом деле, было бы логично иметь две кнопки продолжить и отмена
1111.jpg

и использовать весь функционал кубиков
 
  • Спасибо
Реакции: serg32
Хмм, а может сделать возможность добавлять сразу несколько кнопок, а потом через switch выбирать нужную ветку? Зачем ограничиться двумя :-)
 
  • Спасибо
Реакции: Wide и molotok
В самом деле... если уж делать, так пусть это будет многофункциональная неведомая фигня.... :bk:
 
Предлагаю еще сделать поле для ввода сообщения.


Это может пригодится, когда после ручного действия( когда будут кнопки успех\не успех или свич), нужно быстро сделать заметку к действию. Нажал не успех и в поле вписал почему.

Лично мне очень нехватает данной функции, приходится делать еще окошно наC#, в котором и реализован нужный функционал, но это очень неудобно. Так как во многопотоке нужно искать, какое окошко к какому браузеру принадлежит.
 
Еще желательно сделать чтобы можно было копировать(вручную скоприровать) текст из комментария к действию.

Например я использую это поле в момент проверки адреса доставки, на странице оформления товара в магазине.
Бот вводит адрес довставки, потом проверяет правильность, иногда сайт корректирует адрес - это приводит к остановкер шаблона и ожидания ручного действия. Вручную проверяется адрес (я его записываю в комментарии к ожиданию), было бы очень удобно, если этот адрес можно было скопировать из комментария и использовать на сайте.
 
Пробовал я эту фичу для ввода смс при авторизации. Все же Windows.Forms лучше и практичнее в этом плане. Минус там только один, сложно задать таймаут. В остальном тема класс.
 
  • Спасибо
Реакции: wizard
Пробовал я эту фичу для ввода смс при авторизации. Все же Windows.Forms лучше и практичнее в этом плане. Минус там только один, сложно задать таймаут. В остальном тема класс.
создал бы тему с вопросом, как добавить таймер на вин форму. уверен накидают решений, так как в визуал студии это делается в один клик. значит и в зенно форму можно прикрутить и обработчик закрытия формы тоже.
 
создал бы тему с вопросом, как добавить таймер на вин форму. уверен накидают решений, так как в визуал студии это делается в один клик. значит и в зенно форму можно прикрутить и обработчик закрытия формы тоже.
Да ну, не особо критичная задача была. Тут поиском закривается 98% вопросов)) лайки только успевай ставить))
 
вот C#
форма с таймером:
Развернуть Свернуть Копировать
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "ЗАГОЛОВОК ОКНА";// текст заголовка
F.TopMost = true;// по верх всех окон
F.Size=new System.Drawing.Size(400, 150);// размеры окна
F.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;;// позиция окна


//Лейбл showtime
System.Windows.Forms.Label label = new System.Windows.Forms.Label();
label.Text = "timer 3 сек";
label.Location = new System.Drawing.Point(160,60);
label.AutoSize=true;
F.Controls.Add(label);

//Лейбл2
System.Windows.Forms.Label label2 = new System.Windows.Forms.Label();
label2.Text = "ПРОДОЛЖИТЬ СБОР ДАННЫХ ???";
label2.Location = new System.Drawing.Point(100,20);
label2.AutoSize=true;
F.Controls.Add(label2);



//создаем кнопку ДА
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "ДА";
//положение в окне
button.Location = new System.Drawing.Point(40,50);
//размер кнопочки
button.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button);
//Описание события, улавливающее нажатие Enter в текстбоксе
button.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button
project.Variables["rezult"].Value = button.Text;
F.Close();
};


//создаем кнопку НЕТ
System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button2.Text = "НЕТ";
//положение в окне
button2.Location = new System.Drawing.Point(250,50);
//размер кнопочки
button2.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button2);
//Описание события, улавливающее нажатие Enter в текстбоксе
button2.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button2
project.Variables["rezult"].Value = button2.Text;
F.Close();
};

F.Load += delegate (object s, EventArgs v) {
timer.Interval = 3000; //время ожидания
timer.Tick += new EventHandler(delegate (object _s, EventArgs _v){
timer.Stop();
//здесь обработка полей формы
F.Close();
});
timer.Start();
};
F.ShowDialog();
return 0;

форма с чекбоксом:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/page-2

var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Форма",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };

// создаём контрол
var checkbox = new System.Windows.Forms.CheckBox { Name = "CheckBox", Text = "Чек бокс" };
dialogForm.Controls.Add(checkbox);
checkbox.Location = new Point(12, 12);

// событие Check
checkbox.CheckedChanged += (delegate
{
    /* ВОТ ЗДЕСЬ ОБРАБОТКА СОБЫТИЯ Т.Е. ТЕЛО МЕТОДА. К ПРИМЕРУ */
    if (checkbox.Checked) System.Windows.Forms.MessageBox.Show("Значение изменилось на true", "Обработка события CheckedChanged");
    else System.Windows.Forms.MessageBox.Show("Значение изменилось на false", "Обработка события CheckedChanged");
} );

// показываем форму
var dialogResult = dialogForm.ShowDialog();

форма с текстовым полем:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/#post45706

// создаём форму с указанным значением
var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Сообщение",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };
         
// поле ввода
var textBox = new System.Windows.Forms.TextBox { Name = "InputText", Size = new Size(410, 20) };
// кладём не форму
dialogForm.Controls.Add(textBox);
// положение на форме
textBox.Location = new Point(12, 12);

// кнопка отмены
var okButton = new System.Windows.Forms.Button { Name = "OKButton", Text = @"OK", Size = new Size(75, 23) };
// кладём не форму
dialogForm.Controls.Add(okButton);
// положение на форме
okButton.Location = new Point(269, 38);
// обработка события
okButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.OK; });

// кнопка отмены
var cancelButton = new System.Windows.Forms.Button { Name = "CancelButton", Text = @"Отмена", Size = new Size(75, 23)};
// кладём не форму
dialogForm.Controls.Add(cancelButton);
// положение на форме
cancelButton.Location = new Point(347, 38);
// обработка события
cancelButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.Cancel; });

// показывем форму
var dialogResult = dialogForm.ShowDialog();
// если не было отмены диалога
if (dialogResult != System.Windows.Forms.DialogResult.Cancel) return textBox.Text;
return 0;

Но это все не то. надо в стандартном кубике - так удобнее и понятнее
особенно когда в многопотоке - поди разбери что откуда - а в стандартном кубике удобнее
 
Последнее редактирование:
вот C#
форма с таймером:
Развернуть Свернуть Копировать
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "ЗАГОЛОВОК ОКНА";// текст заголовка
F.TopMost = true;// по верх всех окон
F.Size=new System.Drawing.Size(400, 150);// размеры окна
F.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;;// позиция окна


//Лейбл showtime
System.Windows.Forms.Label label = new System.Windows.Forms.Label();
label.Text = "timer 3 сек";
label.Location = new System.Drawing.Point(160,60);
label.AutoSize=true;
F.Controls.Add(label);

//Лейбл2
System.Windows.Forms.Label label2 = new System.Windows.Forms.Label();
label2.Text = "ПРОДОЛЖИТЬ СБОР ДАННЫХ ???";
label2.Location = new System.Drawing.Point(100,20);
label2.AutoSize=true;
F.Controls.Add(label2);



//создаем кнопку ДА
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "ДА";
//положение в окне
button.Location = new System.Drawing.Point(40,50);
//размер кнопочки
button.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button);
//Описание события, улавливающее нажатие Enter в текстбоксе
button.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button
project.Variables["rezult"].Value = button.Text;
F.Close();
};


//создаем кнопку НЕТ
System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button2.Text = "НЕТ";
//положение в окне
button2.Location = new System.Drawing.Point(250,50);
//размер кнопочки
button2.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button2);
//Описание события, улавливающее нажатие Enter в текстбоксе
button2.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button2
project.Variables["rezult"].Value = button2.Text;
F.Close();
};

F.Load += delegate (object s, EventArgs v) {
timer.Interval = 3000; //время ожидания
timer.Tick += new EventHandler(delegate (object _s, EventArgs _v){
timer.Stop();
//здесь обработка полей формы
F.Close();
});
timer.Start();
};
F.ShowDialog();
return 0;

форма с чекбоксом:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/page-2

var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Форма",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };

// создаём контрол
var checkbox = new System.Windows.Forms.CheckBox { Name = "CheckBox", Text = "Чек бокс" };
dialogForm.Controls.Add(checkbox);
checkbox.Location = new Point(12, 12);

// событие Check
checkbox.CheckedChanged += (delegate
{
    /* ВОТ ЗДЕСЬ ОБРАБОТКА СОБЫТИЯ Т.Е. ТЕЛО МЕТОДА. К ПРИМЕРУ */
    if (checkbox.Checked) System.Windows.Forms.MessageBox.Show("Значение изменилось на true", "Обработка события CheckedChanged");
    else System.Windows.Forms.MessageBox.Show("Значение изменилось на false", "Обработка события CheckedChanged");
} );

// показываем форму
var dialogResult = dialogForm.ShowDialog();

форма с текстовым полем:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/#post45706

// создаём форму с указанным значением
var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Сообщение",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };
      
// поле ввода
var textBox = new System.Windows.Forms.TextBox { Name = "InputText", Size = new Size(410, 20) };
// кладём не форму
dialogForm.Controls.Add(textBox);
// положение на форме
textBox.Location = new Point(12, 12);

// кнопка отмены
var okButton = new System.Windows.Forms.Button { Name = "OKButton", Text = @"OK", Size = new Size(75, 23) };
// кладём не форму
dialogForm.Controls.Add(okButton);
// положение на форме
okButton.Location = new Point(269, 38);
// обработка события
okButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.OK; });

// кнопка отмены
var cancelButton = new System.Windows.Forms.Button { Name = "CancelButton", Text = @"Отмена", Size = new Size(75, 23)};
// кладём не форму
dialogForm.Controls.Add(cancelButton);
// положение на форме
cancelButton.Location = new Point(347, 38);
// обработка события
cancelButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.Cancel; });

// показывем форму
var dialogResult = dialogForm.ShowDialog();
// если не было отмены диалога
if (dialogResult != System.Windows.Forms.DialogResult.Cancel) return textBox.Text;
return 0;

Но это все не то. надо в стандартном кубике - так удобнее и понятнее
особенно когда в многопотоке - поди разбери что откуда - а в стандартном кубике удобнее
Надо было конкурс шаблонов дождатся, че же ты. Примного благодарен. Можно было бы вывести в отдельную тему.
теги(пост выше): Таймаут c#, время выполения c# прервать C# по времени си шарп windows.Forms виндовс формс окно чекбокс в окне винда форма ожидание действий
 
вот C#
форма с таймером:
Развернуть Свернуть Копировать
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "ЗАГОЛОВОК ОКНА";// текст заголовка
F.TopMost = true;// по верх всех окон
F.Size=new System.Drawing.Size(400, 150);// размеры окна
F.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;;// позиция окна


//Лейбл showtime
System.Windows.Forms.Label label = new System.Windows.Forms.Label();
label.Text = "timer 3 сек";
label.Location = new System.Drawing.Point(160,60);
label.AutoSize=true;
F.Controls.Add(label);

//Лейбл2
System.Windows.Forms.Label label2 = new System.Windows.Forms.Label();
label2.Text = "ПРОДОЛЖИТЬ СБОР ДАННЫХ ???";
label2.Location = new System.Drawing.Point(100,20);
label2.AutoSize=true;
F.Controls.Add(label2);



//создаем кнопку ДА
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "ДА";
//положение в окне
button.Location = new System.Drawing.Point(40,50);
//размер кнопочки
button.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button);
//Описание события, улавливающее нажатие Enter в текстбоксе
button.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button
project.Variables["rezult"].Value = button.Text;
F.Close();
};


//создаем кнопку НЕТ
System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button2.Text = "НЕТ";
//положение в окне
button2.Location = new System.Drawing.Point(250,50);
//размер кнопочки
button2.Size=new System.Drawing.Size(100, 40);
//кидаем на форму
F.Controls.Add(button2);
//Описание события, улавливающее нажатие Enter в текстбоксе
button2.Click+= delegate(object sender, System.EventArgs e)
{
//говорим в какую переменную положить button2
project.Variables["rezult"].Value = button2.Text;
F.Close();
};

F.Load += delegate (object s, EventArgs v) {
timer.Interval = 3000; //время ожидания
timer.Tick += new EventHandler(delegate (object _s, EventArgs _v){
timer.Stop();
//здесь обработка полей формы
F.Close();
});
timer.Start();
};
F.ShowDialog();
return 0;

форма с чекбоксом:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/page-2

var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Форма",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };

// создаём контрол
var checkbox = new System.Windows.Forms.CheckBox { Name = "CheckBox", Text = "Чек бокс" };
dialogForm.Controls.Add(checkbox);
checkbox.Location = new Point(12, 12);

// событие Check
checkbox.CheckedChanged += (delegate
{
    /* ВОТ ЗДЕСЬ ОБРАБОТКА СОБЫТИЯ Т.Е. ТЕЛО МЕТОДА. К ПРИМЕРУ */
    if (checkbox.Checked) System.Windows.Forms.MessageBox.Show("Значение изменилось на true", "Обработка события CheckedChanged");
    else System.Windows.Forms.MessageBox.Show("Значение изменилось на false", "Обработка события CheckedChanged");
} );

// показываем форму
var dialogResult = dialogForm.ShowDialog();

форма с текстовым полем:
Развернуть Свернуть Копировать
//http://zennolab.com/discussion/threads/alert-c.7860/#post45706

// создаём форму с указанным значением
var dialogForm = new System.Windows.Forms.Form { Size = new Size(450, 110), ShowIcon = false, Name = "DialogForm", Text = @"Сообщение",
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, MinimizeBox = false, MaximizeBox = false };
       
// поле ввода
var textBox = new System.Windows.Forms.TextBox { Name = "InputText", Size = new Size(410, 20) };
// кладём не форму
dialogForm.Controls.Add(textBox);
// положение на форме
textBox.Location = new Point(12, 12);

// кнопка отмены
var okButton = new System.Windows.Forms.Button { Name = "OKButton", Text = @"OK", Size = new Size(75, 23) };
// кладём не форму
dialogForm.Controls.Add(okButton);
// положение на форме
okButton.Location = new Point(269, 38);
// обработка события
okButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.OK; });

// кнопка отмены
var cancelButton = new System.Windows.Forms.Button { Name = "CancelButton", Text = @"Отмена", Size = new Size(75, 23)};
// кладём не форму
dialogForm.Controls.Add(cancelButton);
// положение на форме
cancelButton.Location = new Point(347, 38);
// обработка события
cancelButton.Click += (delegate { dialogForm.DialogResult = System.Windows.Forms.DialogResult.Cancel; });

// показывем форму
var dialogResult = dialogForm.ShowDialog();
// если не было отмены диалога
if (dialogResult != System.Windows.Forms.DialogResult.Cancel) return textBox.Text;
return 0;

Но это все не то. надо в стандартном кубике - так удобнее и понятнее
особенно когда в многопотоке - поди разбери что откуда - а в стандартном кубике удобнее
А это че значит? В общем не осилил. Код с полем и кнопками сильно отличается от того, что с таймером.
 

Вложения

  • 2022-07-26_035401.jpg
    2022-07-26_035401.jpg
    73,9 KB · Просмотры: 20
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.
Если кому-то поможет - вот выбор режима работы для ПМ. Для работы создайте переменную mode, в зависимости от чекбокса, ее содержимое будет меняться


C#:
Развернуть Свернуть Копировать
var form = new System.Windows.Forms.Form
{
    Text = "Выбор режима",
    Width = 400,
    Height = 250
};

// Радиокнопки для выбора режима
var radio1 = new System.Windows.Forms.RadioButton
{
    Text = "Режим 1",
    Location = new System.Drawing.Point(20, 20),
    AutoSize = true,
    Checked = true // По умолчанию выбран первый режим
};

var radio2 = new System.Windows.Forms.RadioButton
{
    Text = "Режим 2",
    Location = new System.Drawing.Point(20, 50),
    AutoSize = true
};

var radio3 = new System.Windows.Forms.RadioButton
{
    Text = "Режим 3",
    Location = new System.Drawing.Point(20, 80),
    AutoSize = true
};

// Кнопка OK
var okButton = new System.Windows.Forms.Button
{
    Text = "OK",
    Location = new System.Drawing.Point(150, 150),
    Size = new System.Drawing.Size(100, 30)
};

// Добавляем обработчик клика по кнопке
okButton.Click += (sender, e) =>
{
    // Определяем, какой режим выбран
    string selectedMode = radio1.Checked ? "Режим 1" :
                          radio2.Checked ? "Режим 2" :
                          "Режим 3";

    // Записываем выбранный режим в переменную ZennoPoster
    project.Variables["mode"].Value = selectedMode;
    
    // Закрываем форму
    form.DialogResult = System.Windows.Forms.DialogResult.OK;
    form.Close();
};

// Добавляем элементы на форму
form.Controls.Add(radio1);
form.Controls.Add(radio2);
form.Controls.Add(radio3);
form.Controls.Add(okButton);

form.ShowDialog();
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)