0

在编程方面我学得很慢,对不起。我正在silverlight 中做一个windows phone 应用程序。我正在尝试验证输入。

我遇到的问题是我检测到错误的输入并且出现了消息,但是键盘消失了,有效地让他们继续输入错误仍然存​​在。那么有没有办法阻止他们在没有有效输入的情况下离开?

谢谢

bool IsDigitsOnly(string str) {
        foreach (char c in str) {
            if (c < '0' || c > '9') {

                return false;

            }
        }

        return true;
    }

    protected Boolean noLetters() {



        if (!IsDigitsOnly(ReadySecTxtBox.Text)) {
            MessageBox.Show("digits only");
            ReadySecTxtBox.Focus();
            return false;
        }
        if (!IsDigitsOnly(RoundSecTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(RestSecTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(RelaxSecTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(ReadyMinTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(RoundMinTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(RestMinTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(RelaxMinTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        if (!IsDigitsOnly(NoRoundsTxtBox.Text)) {
            MessageBox.Show("digits only");
            return false;
        }
        else return true;

    }

    protected Boolean validInputs(){


        if (noLetters()) {


            if (int.Parse(ReadySecTxtBox.Text) < 0 || int.Parse(ReadySecTxtBox.Text) > 59) {
                MessageBox.Show("seconds must be between 0 and 59");

                return false;
            }
            if (int.Parse(RoundSecTxtBox.Text) < 0 || int.Parse(RoundSecTxtBox.Text) > 59) {
                MessageBox.Show("seconds must be between 0 and 59");
                return false;
            }
            if (int.Parse(RestSecTxtBox.Text) < 0 || int.Parse(RestSecTxtBox.Text) > 59) {
                MessageBox.Show("seconds must be between 0 and 59");
                return false;
            }
            if (int.Parse(RelaxSecTxtBox.Text) < 0 || int.Parse(RelaxSecTxtBox.Text) > 59) {
                MessageBox.Show("seconds must be between 0 and 59");
                return false;
            }

            if (int.Parse(ReadyMinTxtBox.Text) < 0 || int.Parse(ReadyMinTxtBox.Text) > 99) {
                MessageBox.Show("minutes must be between 0 and 99");
                return false;
            }
            if (int.Parse(RoundMinTxtBox.Text) < 0 || int.Parse(RoundMinTxtBox.Text) > 99) {
                MessageBox.Show("minutes must be between 0 and 99");
                return false;
            }
            if (int.Parse(RestMinTxtBox.Text) < 0 || int.Parse(RestMinTxtBox.Text) > 99) {
                MessageBox.Show("minutes must be between 0 and 99");
                return false;
            }
            if (int.Parse(RelaxMinTxtBox.Text) < 0 || int.Parse(RelaxMinTxtBox.Text) > 99) {
                MessageBox.Show("minutes must be between 0 and 99");
                return false;
            }

            if (int.Parse(NoRoundsTxtBox.Text) < 1 || int.Parse(NoRoundsTxtBox.Text) > 99) {
                MessageBox.Show("number of rounds must be between 1 and 99");
                return false;
            }


            else return true;
        }
        else return false;
    }

    protected override void OnManipulationStarted(ManipulationStartedEventArgs e) {

        if (validInputs()) {


            totalSec = (int.Parse(RoundSecTxtBox.Text) + int.Parse(RestSecTxtBox.Text)) * int.Parse(NoRoundsTxtBox.Text)
                + int.Parse(RelaxSecTxtBox.Text) + int.Parse(ReadySecTxtBox.Text);
            totalMin = (int.Parse(RoundMinTxtBox.Text) + int.Parse(RestMinTxtBox.Text)) * int.Parse(NoRoundsTxtBox.Text)
                + int.Parse(RelaxMinTxtBox.Text) + int.Parse(ReadyMinTxtBox.Text);

            TotalMinTxtBox.Text = totalMin.ToString("00");
            TotalSecTxtBox.Text = totalSec.ToString("00");
        }

        base.OnManipulationStarted(e);


    }
4

1 回答 1

1

使用这段代码片段:

private bool Validate(string text)
{
    if (!IsDigitsOnly(text)) {
        MessageBox.Show("digits only");            
        return false;
    }
}

protected Boolean noLetters() {

    if (!Validate(ReadySecTxtBox.Text))
    {
        ReadySecTxtBox.Focus();
        return false;
    }

    if (!Validate(RoundSecTxtBox.Text))
    {
        RoundSecTxtBox.Focus();
        return false;
    }

    //...

    else return true;
}

补充:或者你可以这样做。

private bool ValidateAndFocus(ref TextBox txt)
{
    if (!IsDigitsOnly(txt.Text)) {
        MessageBox.Show("digits only");            
        txt.Focus();
        return false;
    }
}

protected Boolean noLetters() {

    if (!ValidateAndFocus(ref ReadySecTxtBox))
        return false;

    if (!ValidateAndFocus(ref RoundSecTxtBox))
        return false;

    //...

    else return true;
}
于 2012-10-29T06:15:35.537 回答