質問

私は、彼らがどのようなデータが含まれているかどうかを確認したいフォーム上の複数の異なるコントロール(テキストボックス、DateTimePickers、MaskedTextBoxes)を持っています。私は私の「保存」ボタンのClickイベントに次のコードを持っています:

    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!");
            }
        }
    }

このしかし、それはDateTimePickersのために動作しない、のTextBoxとMaskedEditBoxesのため正常に動作します。人のために、私は私が.Valueのプロパティをチェックする必要があります知っているが、私は、Controlオブジェクト(すなわち「control.Value == 『』 || control.Value == nullの」)からそれにアクセスするように見えることはできません。

私は明らかに何かが足りないのですか?私は私がDateTimePickerの値(または単にすべてのコードを改善するために)を確認できるようにするには、このコードを実行できる変更の任意の提案は大歓迎されます。

役に立ちましたか?

解決

あなたはDateTimePickerのにそれらをキャストする必要があります:

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

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

他のヒント

ValuesにはControlプロパティがありません。 DateTimePickerは、例えば、それにユニークな独自のプロパティを作成します。

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

if(control is DateTimePicker)
{
   var picker = control as DateTimePicker;
   // handle DateTimePicker specific validation. 
}

あなたはこのような何かをする必要があります:

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, "");
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top