2015-03-21 2 views
-3

Калькулятор, который я сделал, представляет собой комбинацию текстовых полей и радиообъектов, а при щелчке «вычислять» я хотел бы, чтобы окно сообщения проверяло всю программу, а затем (если необходимо) отобразить окно сообщения, в котором говорится, что «следующие области по-прежнему нуждаются в завершении», а затем перечислите эти области.C# Я сделал это coI сделал co

Я знаю, как закодировать базовый, если я сделал, не знаю, как заставить его проверять несколько текстовых полей и радиообъектов за один раз.

Текущий код кнопки:

private void button4_Click(object sender, EventArgs e) 
{ 
    DrawForce = (Area2 * (StrengthCoeff/(WorkHardExp + 1)) * (Math.Pow(Math.Log(Area1/Area2), WorkHardExp + 1))); 
    DrawForce = Math.Round(DrawForce, 2); 
    textBox7.Text = DrawForce.ToString() + " N"; 
} 

Я не хочу, чтобы скопировать код ввести на здесь, так что я надеюсь, что будет достаточно

Благодаря

+0

'' базовый цикл if ''- Что такое« цикл if »? Не совсем понятно, что вы спрашиваете, или где вы застряли. Вы можете ссылаться на любые элементы управления в форме этого кода, что не работает? – David

+0

ничего себе. 'if loop' и' message box, чтобы проверить всю программу'. Ты мертв ко мне, Бобби. –

+0

@SamAxe Я новичок в этом, и я использовал только «if», чтобы попытаться заставить людей понять, о чем я говорю. Если у вас есть предложения, пожалуйста, дайте мне знать – Chris123454321

ответ

0

Если я вас понимаю правильно, вы ищете способ проверки многих элементов управления в форме в цикле. Есть несколько способов сделать это.

Один из способов - создать коллекцию уровня на форме, которая содержит ссылки на элементы управления. Например, что-то вроде этого:

private IEnumerable<TextBox> textBoxes = new List<TextBox> 
{ 
    TextBox1, 
    TextBox2, 
    TextBox3 
}; 

Затем вы можете проверить это в цикле:

var errors = new List<string>(); 
foreach (var textBox in textBoxes) 
    if (string.IsNullOrWhitespace(textBox.Text)) 
     errors.Add(string.Format("{0} is empty.", textBox.Name)); 
// errors now contains the list of validation messages 

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

Другой вариант может состоять в том, чтобы прокрутить коллекцию Controls формы. Что-то вроде этого:

var errors = new List<string>(); 
foreach (var control in Controls) 
    if (control is TextBox) 
     if (string.IsNullOrWhitespace((control as TextBox).Text)) 
      errors.Add(string.Format("{0} is empty.", (control as TextBox).Name)); 
// errors now contains the list of validation messages 

Это более динамичный, но немного более хрупкий. Если есть какие-либо текстовые поля, вложенные в другие элементы управления, тогда они не найдут их, вам нужно будет сделать это более рекурсивным для цикла через control.Controls. Это может стать немного уродливым и, возможно, не стоит того, если форма вряд ли изменится. Но в любом случае, это может выглядеть примерно так:

private IList<string> GetErrorsForControls(ControlCollection controls) 
{ 
    var errors = new List<string>(); 
    foreach (var control in controls) 
    { 
     if (control is TextBox) 
      if (string.IsNullOrWhitespace((control as TextBox).Text)) 
       errors.Add(string.Format("{0} is empty.", (control as TextBox).Name)); 

     errors = errors.Concat(GetErrorsForControls(control.Controls)); 
    } 
    return errors; 
} 

Тогда в вашем коде вы бы просто вызвать этот метод:

var errors = GetErrorsForControls(Controls); 

Чтобы добавить проверку для других типов элементов управления, кроме текста коробки, просто добавьте другие коллекции уровня класса или добавьте проверки других типов в циклы.