我正在尝试创建一个简单的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都很陌生......
答案 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;
由于TryGetValue
和out
参数可能令人困惑,所以这是另一种方法,如果您不熟悉编程,可能会更容易阅读(我们将使用相同的{{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());
}
}