C#在退出表单之前验证是否已填充所有变量

时间:2017-06-21 12:43:16

标签: c#

以下问题 我有一个WinForm应用程序,我将通过用户输入设置变量,这里只有字符串,十进制或int。这通过在文本框中输入值或在带有按钮的文本框中设置值(增加和减少)来实现。还有两个复选框对(2x是/否)。复选框也将字符串保存在我需要的值中。

在文本框中输入值后,或者设置为正确的数字后,用户按下保存按钮(每个值一个按钮,总共6个保存按钮)。保存按钮始终确保输入正确的值,并保存

在关闭表单之前,我想检查是否已填写所有需要的值,如果没有,请告诉用户:嘿,您忘记了某个值。我怎么能做到这一点?在我的例子中,我想检查Height,Unit和No_of _measure是否已填充值。我可以把它全部变成一个大的" if"与逻辑"或"在它(总共大约14个值),但是我没有得到缺少的具体值,如果没有填写(告诉用户)

示例:

    public decimal Height { get; private set; }
    public int No_of_measure { get; private set; }
    public string Unit { get; private set; }

    private void button3_Click(object sender, EventArgs e) //Save the rough heigth
    {                                                     
        if (textBox2.Text == "")
        { MessageBox.Show("No value detected in [Current Height] Window. Please Click Start first!"); }
        else
        {
            Height = Convert.ToDecimal(textBox2.Text);
        }
    }

    private void button5_Click(object sender, EventArgs e) //save no. of measurements
    {
        if (textBox5.Text == "")
        { MessageBox.Show("Please enter a value"); }
        else
        { No_of_measure = Convert.ToInt32(textBox5.Text); }
    }

    private void checkBox3_CheckedChanged(object sender, EventArgs e) //save Unit mm
    {
        if (checkBox3.Checked == true)
        {
            checkBox4.Checked = false;
            Unit = "mm";
        }
        label22.Text = "mm";
        label23.Text = "mm";

1 个答案:

答案 0 :(得分:0)

关于如何在多个属性中检查null,粗略的方法是将值存储在Dictionary中,您可以在其中运行linq查询,如下所示。这将要求您对表单进行重大更改。

    // properties dictionary populate with your values
    Dictionary<string,string> _propertiesDictionary = new Dictionary<string, string>();

    private bool PropertyChecks()
    {
        return _propertiesDictionary.Any(x => x.Value == null);
    }

您可以创建一个form_closing事件方法并在其中放置您需要的任何逻辑,例如..

    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (PropertyChecks())
        {
            MessageBox.Show("Some properties are null");
            e.Cancel = true;
        }
    }