簡體   English   中英

如何只顯示messageBox一次?

[英]how to show messageBox just once?

在這里學習c#的新手,我會計算cgpa,並且當用戶選擇他們參加的主題數時,相應地,textBox將根據用戶主題數啟用true,其余則啟用false。 因此,當我單擊calculateCGPA時,如果用戶輸入為空,但我想彈出消息,但messageBox顯示為根據用戶留空的次數x的時間。 如何使其僅顯示一次。 Tqvm高級。 非常感謝您的解釋。

1.CheckingUserCheckedRadioButton

private void DisplayTextBox(Control con)
    {
        foreach (Control c in con.Controls)
        {
            if (rad1.Checked)
            {
                if (c is TextBox)
                {
                    ((TextBox)c).Enabled = false;
                    txtCCode1.Enabled = true;
                    txtGrade1.Enabled = true;
                }
                else
                {
                    DisplayTextBox(c);
                }

            }
       }
}

2.DisplayingMessageBoxWhenClickingCalculate

private void calculate(Control con)
    {
        foreach (Control c in con.Controls)
        {
            if (c is TextBox)
            {
                if (c.Text == "")
                {
                    DialogResult x = new DialogResult();
                    x = MessageBox.Show("TextBox cannot be Empty");
                    if (x == DialogResult.OK)
                        txtCCode1.Focus();
                }
                else
                {
                    int totalCredHours = 0;
                    CalcTotalCredHours(credHour1, credHour2, credHour3, credHour4, credHour5, credHour6, ref totalCredHours);
                    courseGP1 = CalcCourseGradePoint(credHour1, gradePoint1);
                    courseGP2 = CalcCourseGradePoint(credHour2, gradePoint2);
                    courseGP3 = CalcCourseGradePoint(credHour3, gradePoint3);
                    courseGP4 = CalcCourseGradePoint(credHour4, gradePoint4);
                    courseGP5 = CalcCourseGradePoint(credHour5, gradePoint5);
                    courseGP6 = CalcCourseGradePoint(credHour6, gradePoint6);
                    double totalCGP = CalcTotalCGP(courseGP1, courseGP2, courseGP3, courseGP4, courseGP5, courseGP6);
                    double gpa = CalcGPA(totalCGP, totalCredHours);
                    lblGPA.Text = gpa.ToString("N");
                }
            }
            else
            {
                calculate(c);
            }
        }              
    }

創建一個顯示帶有全局標志的消息框的方法:

bool showed = false;
private ShowMessageBox(string message)
{
    if (!showed)
         MessageBox.Show(message);
         showed = true;
}

在您的代碼中調用此方法

ShowMessageBox("TextBox cannot be Empty") 

代替

MessageBox.Shows("TextBox cannot be Empty")

您應該具有以下幾行:

static bool showed = false;                                 // <---- This line

private void DisplayTextBox(Control con)
{
    if (rad1.Checked)
    {
        foreach (Control c in con.Controls)
        {
            if (c is TextBox)
            {
                ((TextBox)c).Enabled = false;
                txtCCode1.Enabled = true;
                txtGrade1.Enabled = true;
            }
            else
            {
                DisplayTextBox(c);
            }

        }
    }
    showed = false;                                         // <---- This line
}

private void calculate(Control con)
{
    foreach (Control c in con.Controls)
    {
        if (c is TextBox)
        {
            if (c.Text == "")
            {
                if (!showed)                                // <---- This line
                {                                           // <---- This line
                    showed = true;                          // <---- This line
                    DialogResult x = new DialogResult();
                    x = MessageBox.Show("TextBox cannot be Empty");
                    if (x == DialogResult.OK)
                        txtCCode1.Focus();

                }                                           // <---- This line
            }
            else
            {
                int totalCredHours = 0;
                CalcTotalCredHours(credHour1, credHour2, credHour3, credHour4, credHour5, credHour6, ref totalCredHours);
                courseGP1 = CalcCourseGradePoint(credHour1, gradePoint1);
                courseGP2 = CalcCourseGradePoint(credHour2, gradePoint2);
                courseGP3 = CalcCourseGradePoint(credHour3, gradePoint3);
                courseGP4 = CalcCourseGradePoint(credHour4, gradePoint4);
                courseGP5 = CalcCourseGradePoint(credHour5, gradePoint5);
                courseGP6 = CalcCourseGradePoint(credHour6, gradePoint6);
                double totalCGP = CalcTotalCGP(courseGP1, courseGP2, courseGP3, courseGP4, courseGP5, courseGP6);
                double gpa = CalcGPA(totalCGP, totalCredHours);
                lblGPA.Text = gpa.ToString("N");
            }
        }
        else
        {
            calculate(c);
        }
    }              
}

我不想過多地重新組織代碼,最好的方法是在任何文本框為Empty的情況下添加break語句。

For e.g
foreach (Control c in con.Controls)
        {
            if (c is TextBox)
            {
                if (c.Text == "")
                {
                    DialogResult x = new DialogResult();
                    x = MessageBox.Show("TextBox cannot be Empty");
                    if (x == DialogResult.OK)
                        txtCCode1.Focus();
                        break;
                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM