web-dev-qa-db-ja.com

それぞれに固有のテストを行わずに、nullまたは空の複数のテキストボックスを確認するにはどうすればよいですか?

ユーザーが入力できるフォームに約20のテキストフィールドがあります。テキストボックスに何か入力した場合は、保存を検討するようにユーザーに促したいと思います。今のところ、そのテストは本当に長くて面倒です。

if(string.IsNullOrEmpty(txtbxAfterPic.Text) || string.IsNullOrEmpty(txtbxBeforePic.Text) ||
            string.IsNullOrEmpty(splitContainer1.Panel2) ||...//many more tests

配列がテキストボックスで構成されていて、そのようにチェックする、任意の配列のようなものを使用できる方法はありますか?プログラムの開始以降に変更が加えられたかどうかを確認するための非常に便利な方法は他にありますか?

私が言及しなければならないもう一つのことは、日時ピッカーがあります。 datetimepickerがnullまたは空になることは決してないので、それを回避する必要があるかどうかはわかりません。

編集:私は自分のプログラムに答えを取り入れましたが、それを正しく機能させることができないようです。以下のようにテストを設定し、Application.Exit()呼び出しをトリガーし続けます。

        //it starts out saying everything is empty
        bool allfieldsempty = true;

        foreach(Control c in this.Controls)
        {
            //checks if its a textbox, and if it is, is it null or empty
            if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)))
            {
                //this means soemthing was in a box
               allfieldsempty = false;
               break;
            }
        }

        if (allfieldsempty == false)
        {
            MessageBox.Show("Consider saving.");
        }
        else //this means nothings new in the form so we can close it
        {                
            Application.Exit();
        }

上記のコードに基づいてテキストボックスにテキストが見つからないのはなぜですか?

9
Fuzz Evans

確かに-テキストボックスを探してコントロールから列挙します。

foreach (Control c in this.Controls)
{
    if (c is TextBox)
    {
        TextBox textBox = c as TextBox;
        if (textBox.Text == string.Empty)
        {
            // Text box is empty.
            // You COULD store information about this textbox is it's tag.
        }
    }
}
26
George Johnston

ジョージの答えに基づいていますが、いくつかの便利なLINQメソッドを利用しています。

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)))  
{
//Your textbox is empty
}
11