Member 13068046 Ответов: 1

Как сделать окно сообщения, если отсутствует более одного ввода?


Привет,

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

Есть ли у кого-нибудь какой-нибудь совет, который они могли бы предложить?

Я ценю любые ваши предложения по этой теме.

Большое вам спасибо и много добрых пожеланий.

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

 public Form1()
        {
            InitializeComponent();

            txt_P1In.Text = string.Empty;
            txt_P2In.Text = string.Empty;
            txt_Vol1In.Text = string.Empty;
            txt_Vol2In.Text = string.Empty;
            txt_U1In.Text = string.Empty;
            txt_U2In.Text = string.Empty;
            txt_vel1In.Text = string.Empty;
            txt_vel2In.Text = string.Empty;
            txt_h1In.Text = string.Empty;
            txt_h2In.Text = string.Empty;
            txt_QIn.Text = string.Empty;
            txt_WIn.Text = string.Empty;
            Z = 0;
            P1 = P2 = V1 = V2 = U1 = U2 = v1 = v2 = h1 = h2 = Q = W = Z;
            g = 9.81;
        }

private void CalcBtnOut_Click(object sender, EventArgs e)
        {
            if (radioBtnP1.Checked == true)
            {
                if (txt_P2In.Text == null || txt_Vol1In.Text == null || txt_Vol2In.Text == null || txt_U1In.Text == null || txt_U2In.Text == null || txt_vel1In.Text == null || txt_vel2In.Text == null || txt_h1In.Text == null || txt_h2In.Text == null || txt_QIn.Text == null || txt_WIn.Text == null)
                {
                    MessageBox.Show("You have a missing input");
                }
                else
                P1 = (((P2 * V2) + U2 + ((v2 * v2) / 2) + (g * h2) + W - Q - (g * h1) - ((v1 * v1) / 2) - U1) / V1);
                txt_P1Out.Text = P1.ToString();
                txt_P1In.Text = txt_P1Out.Text;
            }
            else
            if (CalcP1.Checked == false)
            {
                txt_P1Out.Text = null;
            }

[no name]

"совет, который они могли бы предложить", да, проведите некоторое исследование по валидации.

1 Ответов

Рейтинг:
10

OriginalGriff

Свойство Text текстового поля никогда не будет null - это может быть пустая строка, но она никогда не бывает нулевой.
Итак, этот тест:

if (txt_P2In.Text == null || txt_Vol1In.Text == null || txt_Vol2In.Text == null || txt_U1In.Text == null || txt_U2In.Text == null || txt_vel1In.Text == null || txt_vel2In.Text == null || txt_h1In.Text == null || txt_h2In.Text == null || txt_QIn.Text == null || txt_WIn.Text == null)
никогда не получится.
Вместо этого проверьте каждое текстовое поле с помощью:
if (string.IsNullOrWhitespace(txt_P2In.Text) || string.IsNullorWhiteSpace(...

Лично я бы использовал метод:
private bool IsAnyFieldEmpty(params TextBox[] boxes)
    {
    foreach (TextBox box in boxes)
        {
        if (string.IsNullOrWhiteSpace(box.Text)) return true;
        }
    return false;
    }
И назовите это так:
if (IsAnyFieldEmpty(txt_P2In, txt_Vol1In, txt_Vol2In, txt_U1In, 
                    txt_U2In, txt_vel1In, txt_vel2In, txt_h1In, 
                    txt_h2In, txt_QIn, txt_WIn.Text))


Member 13068046

Ваш беспроигрышный вариант! Большое вам спасибо! Это работает абсолютно блестяще.

OriginalGriff

Пожалуйста!