2016-02-28 158 views
0

新手在学习c#这里,即时计算cgpa,当用户选择他们采取的主题的数量,相应地,文本框将根据用户主题的数量启用为true,其余为启用虚假。所以,当我点击calculateCGPA时,如果用户输入为空,但我想要弹出消息,但根据用户留空的数量显示messageBox。如何让它只显示一次。 Tqvm先进。非常感谢解释。如何显示messageBox一次?

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); 
      } 
     }    
    } 
+1

使用静态布尔值。 –

回答

1

你应该有下面几行:

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); 
     } 
    }    
} 
+0

Tqvm为您提供帮助。 –

1

创建显示了一个全局标志的消息框的方法:

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") 
+0

tqvm为您的帮助 –

0

我你不想多洗牌代码,最好的办法是增加一个休息声明如果有任何文本框是空的。

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; 
       } 
+0

其他控件呢?他仍然想与他们合作。 – Sakura

+0

我之前尝试过这种方式,如果我放置中断,我无法计算cgpa。感谢但帮助。 –

+0

兄弟如果一个文本框是空的,计算错误的cgpa有什么意义 –