targa72 Ответов: 2

Как приостановить код и дождаться изменения поля со списком.


Я пытаюсь дождаться, пока пользователь выберет элемент из поля со списком (cboExpireDays), прежде чем продолжить обновление базы данных.
В настоящее время, если вы нажмете кнопку "Да "во всплывающем окне сообщения, поле со списком получит фокус и перейдет к следующей строке кода "уверены, что хотите изменить запись".

private void btnUpdate_Click(object sender, EventArgs e)

if (CurrentDays != "")
            {
                if (CurrentDays == "Never")
                {
                    message = "Your password calls for '" + CurrentDays + "' updating. Do you want to change this?";
                }
                else if (CurrentDays.Split(' ').Last() == "Days")
                {
                    message = "Your password calls for updating every " + CurrentDays + ". Do you want to change this?";
                }

                DialogResult result = MessageBox.Show(message, title, buttons);
                if (result == DialogResult.Yes)
                {
                    cboExpireDays.Focus();
                }
            }
              message = "Are sure you want to change the record for " + txtCompanyP2.Text;
             
             DialogResult result2 = MessageBox.Show(message, title, buttons);
            if (result2 == DialogResult.Yes)
            {
                Update the database
                          }


Что я уже пробовал:

Я пробовал if (cboExpireDays.SelectedItem > -1) перед сообщением об обновлении базы данных. Это только вводило меня в цикл, после выбора элемента он просто возвращался к первой строке кода.

Richard MacCutchan

Вы должны использовать обработчик событий в ComboBox, чтобы получать уведомления, когда пользователь вносит изменения.

targa72

Это было бы прекрасно, если бы он остановился на поле со списком. код не останавливается на поле со списком, он просто устанавливает фокус там и переходит прямо к окну сообщения об обновлении базы данных.

Richard MacCutchan

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

ZurdoDev

Просто переместите и организуйте свой код, чтобы он делал то, что вы хотите.

2 Ответов

Рейтинг:
6

targa72

<pre>Thanks to all for the help. That made me think over how my add button checked all required boxes for correct inputs before adding to the database. That’s when I realized I forgot to put ‘return’ after the cboExpireDays.Focus();. Now the program runs as expected. 
That combobox is not a required item, it’s a duration of time for when the user would like to change their password. I’m not sure what you mean by disable or enable the update button? In the button click all checks for required items are done before the database can be updated. If there is a better way I would like to learn it. This program is my first try in C# after writing in VB.Net for years.


BillWoodruff

Вы можете отключить активацию кнопки ... он не будет реагировать на щелчки ... установив свое свойство 'Enabled в false, и он будет отображаться на экране как слегка "серый"." Или же вы можете скрыть его, установив для его свойства 'Visible значение false.

targa72

Это решение 2 работает. Добавив ' return;’, программа теперь останавливается и ждет ввода в поле со списком. Затем он ждет ответа " да " в окне сообщения, прежде чем база данных будет обновлена. Если ответ "нет", он оставляет событие щелчка.
Прочитав предложения, я решаю добавить еще одну проверку перед обновлением или добавлением в базу данных. Событие нажатия кнопки теперь откроет новую форму со всем предоставленным пользователем текстом для проверки, а затем эфир пользователь нажимает кнопку подтверждения для отправки в базу данных или кнопку редактирования, чтобы вернуться к основной форме для внесения изменений.

BillWoodruff

Некоторые хорошие эмпирические правила:

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

2. когда приложение абсолютно необходимо получить пользовательский ввод, чтобы продолжить: показать форму модально.

targa72

Спасибо за Ваш вклад. Я не совсем понимаю, что вы имеете в виду в № 1.
Второй пункт, я думаю, что он покрыт. Все входные данные в новой форме, на которую я ссылался, уже были доступны только для чтения, но я изменил frm.Show() на frm.ShowDialog(). Этот щелчок по кнопке редактирования не только возвращает пользователя к основной форме, но и закрывает новую форму.

BillWoodruff

#1 я имею в виду, например, что вы не включаете/не показываете кнопку, которая обновляет базу данных, пока все данные, которые вы будете публиковать, не будут проверены.

Теперь вы удовлетворены своим решением ?

твое здоровье, Билл

Рейтинг:
0

OriginalGriff

Вы не должны писать такой код в Windows: это "процедурное мышление", где вы контролируете, что пользователь делает, когда.
Вместо этого вы "ждете, пока пользователь что-то сделает" , реагируя на события, которые он запускает.

Таким образом, в этом случае ваша кнопка обновления отключит кнопку обновления до тех пор, пока пользователь не изменит пароль через combobox, а затем немедленно выйдет.
Когда combobox изменяется, он запускает событие, которое вы обрабатываете, и - если новый пароль действителен - снова включает кнопку обновления, чтобы пользователь мог сохранить его.

Если вы действительно сидели там и "ждали пользователя" внутри обработчика событий, то ничего никогда не произойдет, потому что поток пользовательского интерфейса занят ожиданием и не будет реагировать на ввод пользователя!