private void ReturnToFirstScreenAnimation_Completed(object sender, EventArgs e) { // MessageBox.Show("Анимация завершена"); imgLoading.Visibility = Visibility.Collapsed; txtScreenTop.Visibility = Visibility.Visible; // Переходим на указанный экран // curScreen = nextScreen; CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen); }
private void InputAnimation_Completed(object sender, EventArgs e) { // MessageBox.Show("Анимация завершена"); // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз // if (IsAnimationCompleted) { return; } IsAnimationCompleted = true; imgLoading.Visibility = Visibility.Collapsed; txtScreenTop.Visibility = Visibility.Visible; // imgLoading2.Visibility = Visibility.Collapsed; // пробуем внести указанное кол-во указанных купюр // string status = InputTransaction(); if (status.Length > 0) { txtErrorInfo.Text = status; // "Банкомат не имеет возможности принять все указанные купюры."; } else { txtErrorInfo.Text = ""; } // Переходим на указанный экран // curScreen = nextScreen; CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen); }
/// <summary> /// Вспомогательная функция - переход между экранами в зависимости от текущего экрана /// </summary> /// <param name="number">Цифровой код нажатой кнопки (если это цифра)</param> /// <param name="key">Имя нажатой кнопки (если это не цифра)</param> /// <param name="tag">Tag нажатой кнопки</param> public void SwitchScreens(int number, string key, string tag) { // Нажата кнопка "Вернуть карту" => // if (curScreen != EnScreens.Initial && tag.ToLower().Contains("вернуть")) { // Производим сброс всех учавствующих в экранных операциях полей ResetStates(); // Переходим на начальный экран // NextScreenInfo(0); // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию // nextScreen = EnScreens.Initial; // Показываем анимацию // // imgLoading DoubleAnimation imgAnimation = new DoubleAnimation(); imgAnimation.From = 0; // imgLoading.Opacity; imgAnimation.To = 1; imgAnimation.Duration = TimeSpan.FromSeconds(1); imgAnimation.AutoReverse = true; imgAnimation.Completed += ReturnToFirstScreenAnimation_Completed; txtScreenTop.Visibility = Visibility.Collapsed; imgLoading.Visibility = Visibility.Visible; imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation); } switch (curScreen) { // //----------- Начальный экран для выбора карты и нажата одна из правых экранных кнопок ----- // case EnScreens.Initial: if (number < 0) { bool isPlaceholderFound = false; // Запоминаем индекс текущего владельца карты // if (key.StartsWith("btnScreen") && tag.Length > 0) { for (int k = 0; k < listCardholders.Count; k++) { string name = listCardholders[k].Name; if (name.Equals(tag, StringComparison.CurrentCultureIgnoreCase)) { curCardholderIndex = k; isPlaceholderFound = true; break; } } } // Переходим на экран для ввода ПИН-кода // if (isPlaceholderFound) { NextScreenInfo(EnScreens.Password); //// Запоминаем индекс требуемого к переходу экрана и запускаем анимацию //// //nextScreenIndex = 1; //// Показываем анимацию //// //// imgLoading //DoubleAnimation imgAnimation = new DoubleAnimation(); //imgAnimation.From = 0; // imgLoading.Opacity; //imgAnimation.To = 1; //imgAnimation.Duration = TimeSpan.FromSeconds(1); //imgAnimation.AutoReverse = true; //imgAnimation.Completed += ReturnToFirstScreenAnimation_Completed; //txtScreenTop.Visibility = Visibility.Collapsed; //imgLoading.Visibility = Visibility.Visible; //imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation); } } break; // //----------- Экран для ввода ПИН-кода + нажата одна из цифр ----------------- // case EnScreens.Password: if (number >= 0 && !key.Equals("btnEnter")) { // Если введено 4 цифры - то считаем, что ПИН-код принят, запоминаем держателя карты и переходим на следующий экран // if (++curPinCodeLength < 4) { txtScreenPass.Text += "*"; } else if (curPinCodeLength >= 3) { curPinCodeLength = 0; txtScreenPass.Text = ""; // Запоминаем держателя карты // CurrentCardholder = listCardholders[curCardholderIndex]; // Переходим на экран выбора действия (снятие или внесение наличных) // NextScreenInfo(EnScreens.Actions); //// Запоминаем индекс требуемого к переходу экрана и запускаем анимацию //// //nextScreenIndex = 2; //// Показываем анимацию //// //// imgLoading //DoubleAnimation imgAnimation = new DoubleAnimation(); //imgAnimation.From = 0; // imgLoading.Opacity; //imgAnimation.To = 1; //imgAnimation.Duration = TimeSpan.FromSeconds(1); //imgAnimation.AutoReverse = true; //imgAnimation.Completed += ReturnToFirstScreenAnimation_Completed; //txtScreenTop.Visibility = Visibility.Collapsed; //imgLoading.Visibility = Visibility.Visible; //imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation); } } break; // //------ Экран для выбора действия (снятие или внесение наличных) и нажата одна из кнопок: btnScreen5 или btnScreen6 ------- // case EnScreens.Actions: if (key.StartsWith("btnScreen") && tag.Length > 0) { if (tag.ToLower().Contains("внесен")) { // Переходим на экран внесения наличных NextScreenInfo(EnScreens.InputBanknote); } else if (tag.ToLower().Contains("выдач")) { // Переходим на экран снятия наличных NextScreenInfo(EnScreens.OutputSum); } } break; // //------ Экран для выбора суммы снятия наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.OutputSum: if (key.StartsWith("btnScreen")) { // Запоминаем запрашиваемую к снятию сумму // if (key.StartsWith("btnScreen") && tag.Length > 0) { int amount = 0; if (int.TryParse(tag, out amount)) { requestedAmount = amount; } else { requestedAmount = 0; } } // Проверяем, что наличие средств на карте клиента - позволяет выполнить текущую операцию // if (requestedAmount > CurrentCardholder.Balans) { txtErrorInfo.Text = "Ваш текущий баланс не позволяет выполнить запрошенную операцию."; // Возврат к текущему экрану return; } else if (!CheckAtmOutputTotal()) { // есть ли у банкомата возможность выдать указанную сумму // txtErrorInfo.Text = "Банкомат не имеет возможности выдать указанную сумму."; // Возврат к текущему экрану return; } else { txtErrorInfo.Text = ""; // Переходим на экран выбора типа выдаваемых купюр NextScreenInfo(EnScreens.OutputBanknote); return; } } break; // //------- Экран выбора типа выдаваемых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.OutputBanknote: if (tag.ToLower().Contains("назад")) { // Нажата кнопка "Назад" => Переходим на предыдущий экран (Экран выбора выдаваемой суммы) // requestedAmount = 0; requestedBanknote = 0; txtErrorInfo.Text = ""; NextScreenInfo(EnScreens.OutputSum); } else if (key.StartsWith("btnScreen") && tag.Length > 0) { // Запоминаем запрошенный к выдаче текущим пользователем тип купюр - requestedBanknote // int amount = 0; if (int.TryParse(tag, out amount)) { requestedBanknote = amount; } else { requestedBanknote = 0; } // Проверяем, что запрошенная сумма больше запрошенного к выдаче типа купюр // if (requestedAmount < requestedBanknote) { txtErrorInfo.Text = "Запрошенная сумма не может быть выдана указанными купюрами."; // Возврат к текущему экрану return; } else if (!CheckAtmOutputStatus()) { // есть ли у банкомата возможность выдать запрошенные купюры // txtErrorInfo.Text = "Банкомат не имеет запрошенных купюр."; // Возврат к текущему экрану return; } else { txtErrorInfo.Text = ""; // Переходим на экран выдачи денег NextScreenInfo(EnScreens.OutputResult); return; } } break; // //------- Экран выдачи наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.OutputResult: if (tag.ToLower().Contains("другие")) { // Нажата кнопка "Другие операции" => Переходим на экран выбора доступных для пользователя операций // requestedBanknote = 0; requestedAmount = 0; txtErrorInfo.Text = ""; NextScreenInfo(EnScreens.Actions); } break; // //------- Экран выбора типа вносимых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.InputBanknote: if (key.StartsWith("btnScreen") && tag.Length > 0) { // Запоминаем запрошенный к внесению текущим пользователем тип купюр - requestedBanknote // int amount = 0; if (int.TryParse(tag, out amount)) { requestedBanknote = amount; } else { requestedBanknote = 0; } if (!CheckAtmInputStatus()) { // есть ли у банкомата возможность принять предлагаемые купюры // txtErrorInfo.Text = "Банкомат не имеет возможности принять такие купюры."; // Возврат к текущему экрану return; } else { txtErrorInfo.Text = ""; // Переходим на экран выбора кол-ва вносимих купюр NextScreenInfo(EnScreens.InputQuantity); return; } } break; // //------ Экран для выбора количества вносимых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.InputQuantity: if (tag.ToLower().Contains("назад")) { // Нажата кнопка "Назад" => Переходим на предыдущий экран (Экран выбора типа вносимых купюр) // requestedAmount = 0; requestedBanknote = 0; txtErrorInfo.Text = ""; NextScreenInfo(EnScreens.InputBanknote); } else if (key.StartsWith("btnScreen") && tag.Length > 0) { // Запоминаем кол-во вносимых купюр // int amount = 0; if (int.TryParse(tag, out amount)) { requestedAmount = amount; } else { requestedAmount = 0; } if (!CheckAtmInputTotal()) { // есть ли у банкомата возможность принять указанное количество купюр // txtErrorInfo.Text = "Банкомат не имеет возможности принять указанное кол-во купюр."; // Возврат к текущему экрану return; } else { txtErrorInfo.Text = ""; // Переходим на экран внесения наличных NextScreenInfo(EnScreens.InputResult); return; } } break; // //------- Экран приема наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8 ------ // case EnScreens.InputResult: if (tag.ToLower().Contains("другие")) { // Нажата кнопка "Другие операции" => Переходим на экран выбора доступных для пользователя операций // requestedBanknote = 0; requestedAmount = 0; txtErrorInfo.Text = ""; NextScreenInfo(EnScreens.Actions); } break; default: break; } }
// //----------- Вспомогательные функции --------------- // #region NextScreenInfo() /// <summary> /// Переходим на указанный экран /// </summary> /// <param name="nextScreen">Требуемый экран, к которому хотим перейти</param> /// <returns></returns> bool NextScreenInfo(EnScreens screen) { if (screen == EnScreens.OutputResult) { // //---------- Экран выдачи денег ------ // // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию // nextScreen = screen; // Показываем анимацию // // imgLoading DoubleAnimation imgAnimation = new DoubleAnimation(); imgAnimation.From = 0; // imgLoading.Opacity; imgAnimation.To = 1; imgAnimation.Duration = TimeSpan.FromSeconds(1); imgAnimation.AutoReverse = true; imgAnimation.Completed += OutputAnimation_Completed; txtScreenTop.Visibility = Visibility.Collapsed; // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз // IsAnimationCompleted = false; imgLoading.Visibility = Visibility.Visible; imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation); //// Дополнительно показываем анимацию в блоке состояния банкомата //// //imgLoading2.Visibility = Visibility.Visible; //imgLoading2.BeginAnimation(Image.OpacityProperty, imgAnimation); } else if (screen == EnScreens.InputResult) { // //---------- Экран внесения денег ------ // // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию // nextScreen = screen; // Показываем анимацию // // imgLoading DoubleAnimation imgAnimation = new DoubleAnimation(); imgAnimation.From = 0; // imgLoading.Opacity; imgAnimation.To = 1; imgAnimation.Duration = TimeSpan.FromSeconds(1); imgAnimation.AutoReverse = true; imgAnimation.Completed += InputAnimation_Completed; txtScreenTop.Visibility = Visibility.Collapsed; // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз // IsAnimationCompleted = false; imgLoading.Visibility = Visibility.Visible; imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation); //// Дополнительно показываем анимацию в блоке состояния банкомата //// //imgLoading2.Visibility = Visibility.Visible; //imgLoading2.BeginAnimation(Image.OpacityProperty, imgAnimation); } else { // Переходим на указанный экран // curScreen = screen; CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen); } return(true); }