C# - Невозможно получить оператор if, чтобы он работал как надо - Бросить новую систему. АргументException - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в изучении C#, и я пытаюсь создать приложение WPF, которое задает вопросы пользователя. Затем я преобразовываю эти ответы в строки и экспортирую их в файл CSV.

Один из вопросов: «Выберите число от 1 до 5». Мне нужно сделать так, чтобы, если число меньше 1 или больше 5, оно просило пользователя выбрать другое число. Я пытался добиться этого с помощью приведенного ниже кода. Это несколько работает, потому что когда я нажимаю сохранить как, ничего не произойдет, если я использую неправильный номер. Но он не спрашивает пользователя, как я хочу. Пожалуйста, кто-нибудь может взглянуть на мой код и сообщить мне, почему он не работает?

        private void btnSaveClick(object sender, RoutedEventArgs e)
        {
            try
            {
                string firstName = tbFirstName.Text;
                string lastName = tbLastName.Text;
                string jobTitle = tbJobTitle.Text;
                string chickenEgg = tbChickenEgg.Text;
                string _oneFive = tbNumber.Text;
                int oneFive = Convert.ToInt32(_oneFive);

                if ((oneFive > 5) || (oneFive < 1))
                {
                    throw new System.ArgumentException("Please use a number between 1-5");
                }

                string csvContent = string.Format("{0},{1},{2},{3},{4}", FormatCSV(firstName), FormatCSV(lastName), FormatCSV(jobTitle), FormatCSV(chickenEgg), FormatCSV(_oneFive));

                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "CSV file (*.csv)|*.csv";
                if (saveFileDialog.ShowDialog() == true)
                    File.WriteAllText(saveFileDialog.FileName, csvContent);

                tbFirstName.Clear();
                tbLastName.Clear();
                tbJobTitle.Clear();
                tbChickenEgg.Clear();
                tbNumber.Clear();

                tbFirstName.Focus();
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }

        static string FormatCSV(string _input)
        {

            try
            {
                string result = "";

                if ((_input.Contains(",")) || (_input.Contains(" ")))
                {
                    result = string.Format("\"{0}\"", _input.Trim());
                }
                else
                {
                    result = _input.Trim();
                }


                return result;
            }
            catch (Exception e)
            {
                throw e;
            }

Когда я попадаю в блок catch, ничего не отображается или, кажется, не происходит.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Вместо создания исключения вы можете отобразить для пользователя MessageBox:

private void btnSaveClick(object sender, RoutedEventArgs e)
{
    string firstName = tbFirstName.Text;
    string lastName = tbLastName.Text;
    string jobTitle = tbJobTitle.Text;
    string chickenEgg = tbChickenEgg.Text;
    string _oneFive = tbNumber.Text;
    int oneFive = Convert.ToInt32(_oneFive);

    if ((oneFive > 5) || (oneFive < 1))
    {
        MessageBox.Show("Please use a number between 1-5", "", MessageBoxButton.OK, MessageBoxImage.Information);
    }
    else
    {
        string csvContent = string.Format("{0},{1},{2},{3},{4}", FormatCSV(firstName), FormatCSV(lastName), FormatCSV(jobTitle), FormatCSV(chickenEgg), FormatCSV(_oneFive));

        SaveFileDialog saveFileDialog = new SaveFileDialog();
        saveFileDialog.Filter = "CSV file (*.csv)|*.csv";
        if (saveFileDialog.ShowDialog() == true)
            File.WriteAllText(saveFileDialog.FileName, csvContent);

        tbFirstName.Clear();
        tbLastName.Clear();
        tbJobTitle.Clear();
        tbChickenEgg.Clear();
        tbNumber.Clear();

        tbFirstName.Focus();
    }
}

Затем пользователь может нажать «ОК», чтобы закрыть окно сообщения, а затем ввести новый номер и нажать кнопка «Сохранить» еще раз. Вот как правило GUI приложения работают.

1 голос
/ 22 апреля 2020

Если вы хотите что-то сказать пользователю, простой способ сделать это с помощью окна сообщения

MessageBox.Show("enter a number between 1 and 5");

Лучше, но немного сложнее использовать подтверждение привязки . Это будет отклонять ввод, как только он будет введен.

Возможно, будет хорошей идеей прочитать Лучшие практики для исключений , одно правило - обрабатывать общие условия, не выбрасывая исключения, и неправильное входное значение будет одним из этих распространенных случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...