Есть ли способ, которым я могу упростить это? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть две метки (Pay и Hours), которые я хочу умножить. Я хочу, чтобы окно с ошибкой отображалось, когда пользователь не вводил число, но я могу только выяснить, как проще всего это сделать два оператора if и сделать это таким образом. Любая помощь будет великолепна.

    private void btnCalc_Click(object sender, EventArgs e)
    {
        double hours = Double.Parse(tbxHours.Text);
        double pay = Double.Parse(tbxPay.Text);

        if (Double.TryParse(tbxPay.Text,  out pay))
            {
            double result = hours * pay;
            MessageBox.Show($" total amount is {result} ", "Click Event",
            MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

        }
        else
        {
            MessageBox.Show($"You must enter a number", "Input Error",
        MessageBoxButtons.OK, MessageBoxIcon.Error);

            tbxPay.Clear();

        }


        if (Double.TryParse(tbxHours.Text, out hours))
        {
            double result = hours * pay;
        }
        else
        {
            MessageBox.Show($"You must enter a number", "Input Error",
        MessageBoxButtons.OK, MessageBoxIcon.Error);

            tbxHours.Clear();

        }
    }

1 Ответ

0 голосов
/ 30 августа 2018

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

private void btnCalc_Click(object sender, EventArgs e)
{
    if (TryParseFromTextBox(tbxHours, out double hours) && 
        TryParseFromTextBox(tbxPay, out double pay))
    {
        double result = hours * pay;
        MessageBox.Show($" total amount is {result} ", "Click Event", 
                        MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
    }
}

public bool TryParseFromTextBox(TextBox control, out double value)
{
    if (!double.TryParse(control.Text, out value))
    {
        MessageBox.Show($"You must enter a number in {control.Name}", "Input Error", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

        control.Clear();
        return false;
    }
    return true;
}

Несколько дополнительных вещей для рассмотрения.

  • Должны ли вы сосредоточиться на контроле, где анализ числа не удается?
  • Должен ли ваш btnCalc быть кликабельным, если в этих текстовых полях нет действительных чисел?
...