0

フォームにいくつかの異なるコントロール (TextBoxes、DateTimePickers、MaskedTextBoxes) があり、それらにデータが含まれているかどうかを確認したいと考えています。「保存」ボタンのクリックイベントに次のコードがあります。

    private void radBtnSave_Click(object sender, EventArgs e)
    {
        this.Cancelled = false;
        bool bValid = true;

        foreach(Control control in this.Controls)
        {
            if (control.Tag == "Required")
            {
                if (control.Text == "" || control.Text == null)
                {
                    errorProvider.SetError(control, "* Required Field");
                    bValid = false;
                }
                else
                {
                    errorProvider.SetError(control, "");
                }
            }
        }

        if (bValid == true)
        {
            bool bSaved = A133.SaveData();
            if (bSaved != true)
            {
                MessageBox.Show("Error saving record");
            }
            else
            {
                MessageBox.Show("Data saved successfully!");
            }
        }
    }

これは、TextBoxes と MaskedEditBoxes では正常に機能しますが、DateTimePicker では機能しません。それらについては、.Value プロパティを確認する必要があることはわかっていますが、Control オブジェクトからアクセスできないようです (つまり、"control.Value == "" || control.Value == null")。

明らかな何かが欠けていますか?DateTimePicker の値を確認できるようにする (または単にコードを改善する) ために、このコードに加えることができる変更の提案は、非常に高く評価されます。

4

3 に答える 3

3

それらを DateTimePicker にキャストする必要があります。

DateTimePicker dtp = control as DateTimePicker;
if(dtp !=null)
{
   //here you can access dtp.Value;
}

また、コードの最初の部分で String.IsNullOrEmpty(control.Text) を使用します。

于 2009-08-25T21:24:35.657 に答える
1

sのValueプロパティはありません。、たとえば、独自の独自のプロパティを作成します。ControlDateTimePicker

Control残念ながら、オブジェクトの単一ループからこれを処理する完全に一般的な方法はありません。あなたができる最善のことは、これに沿ったものです:

if(control is DateTimePicker)
{
   var picker = control as DateTimePicker;
   // handle DateTimePicker specific validation. 
}
于 2009-08-25T21:26:34.483 に答える
0

次のようにする必要があります。

foreach(Control control in this.Controls)
{
    if (control.Tag == "Required")
    {
        DateTimePicker dtp = control as DateTimePicker;
        if (dtp != null)
        {
            // use dtp properties.
        }
        else if (control.Text == "" || control.Text == null)
        {
            errorProvider.SetError(control, "* Required Field");
            bValid = false;
        }
        else
        {
            errorProvider.SetError(control, "");
        }
    }
}
于 2009-08-25T21:25:34.797 に答える