データのControl.Valueをチェック
-
19-09-2019 - |
質問
私は、彼らがどのようなデータが含まれているかどうかを確認したいフォーム上の複数の異なるコントロール(テキストボックス、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)を使用します。
他のヒント
Value
sには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, "");
}
}
}
所属していません StackOverflow