如果数字在X和Y之间

时间:2015-02-05 18:42:06

标签: c# winforms

我正在尝试创建一个简单的Windows窗体应用程序(Visual Studio 2013)来将(学校)成绩转换为文本,例如输入1 - > “非常好”等等。

private void btn_note_Click(object sender, EventArgs e)
{
      if (txtb_note.Text == "1")
      {
           lbl_ergebnis.Text = "very good";
      }

      if (txtb_note.Text == "2")
      {
           lbl_ergebnis.Text = "good";
      } 

      // Etc...
}

等等。但我想补充一点,如果我输入99或只是一些文本,它应该显示“无效输入”,例如。

但我怎么能这样做? 我试过了

if (txtb_note.Text == "?????")
{
      if (txtb_note.Text == "1")
      {
          lbl_ergebnis.Text = "very good";
      }
}
else 
{
    lbl_ergebnis.Text = "invalid";
}

对于?????我需要一些“1到6之间的数字”,所以7会导致“无效”。我可以在那里使用什么?

希望你能理解我的问题。

BTW:我对C#和Visual Studio都很陌生......

7 个答案:

答案 0 :(得分:2)

虽然其他答案显示了这样做的方法。我建议反对他们,我会使用正确的工具。

从概念上讲,你想要的是一个 Dictionary ,它将成绩(一个整数)翻译成一个字符串,所以我会走那条路:

  // We are going to use integer keys, with string values
  var stringGrades = new Dictionary<int, string>()
  {
    {1, "good"}, // 1 is the Key, "good" is the Value
    {2, "decent"},
    {3, "bad"}
  };

  int integerGrade;
  string textGrade;
    // try to convert the textbox text to an integer
  if(!Int32.TryParse(txtb_note.Text, out integerGrade) 
    // if successful, try to find the resulting integer 
    // (now in "integerGrade") among the keys of the dictionary
     || !stringGrades.TryGetValue(integerGrade, out textGrade))
     // Any of the above conditions weren't successful, so it's invalid
     lbl_ergebnis.Text = "Invalid value";
  else
     // It worked, so now we have our string value in the variable "textGrade"
     // obtained by the "out textGrade" parameter on TryGetValue
     lbl_ergebnis.Text = textGrade;

在您的特定情况下,您使用原始成绩作为文本框中的字符串,因此如果您愿意,请转到该路线:

  // This time, we directly use string as keys
  var stringGrades = new Dictionary<string, string>()
  {
    {"1", "good"},
    {"2", "decent"},
    {"3", "bad"}
  };

  string textGrade;
  // Try to get the value in the dictionary for the key matching the text
  // on your textbox, no need to convert to integer
  if(!stringGrades.TryGetValue(txtb_note.Text, out textGrade))
     lbl_ergebnis.Text = "Invalid value";
  else
     lbl_ergebnis.Text = textGrade;

由于TryGetValueout参数可能令人困惑,所以这是另一种方法,如果您不熟悉编程,可能会更容易阅读(我们将使用相同的{{1}如上所述的字典):

<string, string>

如果您想循环循环,可以将其转换为单行代码,例如:

  // If our dictionary doesn't contain the key we are looking for,
  // the input is invalid
  if(!stringGrades.ContainsKey(txtb_note.Text))
     lbl_ergebnis.Text = "Invalid value";
  else
     // it contains the key, so let's show its value:
     lbl_ergebnis.Text = stringGrades[txtb_note.Text];

(不要对最后一段代码感到困惑,正如我所说,这只是“循环循环”)

其他方式(使用 lbl_ergebnis.Text = stringGrades.ContainsKey(txtb_note.Text) ? stringGrades[txtb_note.Text] : "Invalid value"; switch)有效,但不是正确的工具。从概念上思考,你想要做的是将一个值转换为一个不同的值:这是一个字典,并在.NET中有一个相应的工具(if-else类)

如果您将来需要其他成绩,您可以将它们添加到字典中,转换字符串的代码将继续有效。此外,该字典不需要存储在代码中:它可以从文本文件,Web服务,数据库或其他任何内容中检索,然后在没有重新编译应用程序的情况下工作。

答案 1 :(得分:1)

您是否尝试过切换声明? 像这样

        string result;
        switch (txtb_note.Text)
        {
            case "1":
                result = "Very Good";
                break;
            case "2":
                result = "Good";
                break;
            case "3":
                result = "Normal";
                break;
            case "4":
                result = "Below Normal";
                break;
            case "5":
                result = "If you were Asian you would be dishonored";
                break;
            default:
                result = "Invalid Number";
                break;
        }
        return result;

这样,在这些情况下未设置的所有内容都将归入默认值并返回“无效数字”

答案 2 :(得分:1)

您可以使用if-else if-else

if (txtb_note.Text == "1")
{
    lbl_ergebnis.Text = "very good";
}
else if (txtb_note.Text == "2")
{
    lbl_ergebnis.Text = "good";
} 
else
{
    lbl_ergebnis.Text = "invalid";
}

switch

switch(txtb_note.Text)
{
    case "1":
        lbl_ergebnis.Text = "very good";
        break;
    case "2":
        lbl_ergebnis.Text = "good";
        break;
    default:
        lbl_ergebnis.Text = "invalid";
        break;
}

然后你还应该考虑将字符串解析为int以允许其他选项。

int val;
if(!int.TryParse(txtb_note.Text, out val)
{
    lbl_ergebnis.Text = "Not a valid integer";
}
else
{
    if(val >= 0 && val <=4)
        lbl_ergebnis.Text = "Bad";
   // Additional conditions.
}

答案 3 :(得分:0)

您可以使用“if ... else”或&#34;切换&#34; 例如

 if (txtb_note.Text == "1")
 {
    lbl_ergebnis.Text = "very good";
 }
 else if (txtb_note.Text == "2")
 {
    lbl_ergebnis.Text = "good";
 }
 ...
 else
 {
     lbl_ergebnis.Text = "invalid";
 }

答案 4 :(得分:0)

  

首先,您需要将其转换为int!尝试这样的事情   也许

try{
int gradeNumber = int.Parse(txtb_note.Text);
if(gradeNumber > 6) MessageBox.Show("Please enter a number between 1 and 6!");
else if(gradeNumber == 1) lbl_ergebnis.Text = "very good";
else if(gradeNumber == 2) lbl_ergebnis.Text = "good";
// and so on :)
}
catch(Exception){
MessageBox.Show("please enter a valid int!");
}

答案 5 :(得分:0)

你应该考虑逻辑。 1.将文本框值转换为整数。 2.将数字比较为1和7

int value = 0;
//TryParse returns true if the string can be converted to integer and converts the string to integer and pass to variable "value"
if(Integer.TryParse(txtb_note.Text, out value)) 
{
   if(value > 1 && value < 7)
         lbl_ergebnis.Text = "very good";
else lbl_ergebnis.Text = "invalid";
}
else lbl_ergebnis.Text = "invalid";

答案 6 :(得分:0)

这很简单。试试这个:

private void btn_note_Click(object sender, EventArgs e)
    {
        try
        {
            int score = int.Parse(txtb_note.Text);
        if (score >=1 && score <7)
        {
            if (score == 1)
            {
                lbl_ergebnis.Text = "very good";
            }
            .
            .
            .
            // Keep going to 6 
        }
        else
        {
            lbl_ergebnis.Text = "invalid";
        }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

此外,您可以使用switch

private void btn_note_Click(object sender, EventArgs e)
    {
        try
        {
            int score = int.Parse(txtb_note.Text);
        switch (score)
        {
            case "1":
                score = "Very Good";
                break;
            case "2":
                score = "Good";
                break;
                .
                .
                .
                .
                // Keep going to 6 
            default:
                score = "invalid";
                break;
        }
        return score;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }