C# WinForm按钮在1-2次使用后停止工作
我有一个程序,通过命名一个国家(从列表中)来测试用户,并要求用户输入其首都。如果他们得到正确答案,则显示正确答案的计数器,并向其添加+1。如果它是错误的,同样的事情去,但不正确的计数器。我完成了它的代码,但是每当我使用Check-Answer按钮时,它就不再验证文本框中的输入,并且计数器(正确或不正确)都没有任何变化。如果第一个是正确的,第二个是错误的,则1表示正确,1表示不正确。此后,“检查答案”按钮下的代码不再执行。如果我得到2对或2错,它只计算第一个1,然后停止工作C# WinForm按钮在1-2次使用后停止工作,c#,.net,C#,.net,我有一个程序,通过命名一个国家(从列表中)来测试用户,并要求用户输入其首都。如果他们得到正确答案,则显示正确答案的计数器,并向其添加+1。如果它是错误的,同样的事情去,但不正确的计数器。我完成了它的代码,但是每当我使用Check-Answer按钮时,它就不再验证文本框中的输入,并且计数器(正确或不正确)都没有任何变化。如果第一个是正确的,第二个是错误的,则1表示正确,1表示不正确。此后,“检查答案”按钮下的代码不再执行。如果我得到2对或2错,它只计算第一个1,然后停止工作 { // Decla
{
// Declare structure
struct Country
{
// Declare strings
public string countryName;
public string capital;
}
public partial class Form1 : Form
{
// Create List for CourseInfo
private List<Country> countryList = new List<Country>();
Country currentCountry;
public Form1()
{
InitializeComponent();
}
private void ReadFile()
{
try
{
// Call StreamReader to use imported file
StreamReader inputFile;
string line;
Country entry = new Country();
// Delimiter to separate values in text file
char[] delim = { ',' };
// Open text file
inputFile = File.OpenText("countries.txt");
while (!inputFile.EndOfStream)
{
line = inputFile.ReadLine();
// Tokenize the strings separated by the delimiter ','
string[] tokens = line.Split(delim);
entry.countryName = tokens[0]; // Tokenized entry for COUNTRY
entry.capital = tokens[1]; // Tokenized entry for CAPITAL
countryList.Add(entry);
}
}
catch (Exception ex)
{
// Shows error message
MessageBox.Show(ex.Message);
}
}
private void DisplayCountry()
{
// Create random variable
Random rand = new Random();
// Country us randomly chosen from the list
int countryPosition = rand.Next(countryList.Count);
// Selected country
currentCountry = countryList[countryPosition];
// Show selected country in Label
countryAnswerLabel.Text = currentCountry.countryName;
}
private void ExitButton_Click(object sender, EventArgs e)
{
// Closes the form
this.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
// Call method to load StreamReader with the file
ReadFile();
}
private void QuizButton_Click(object sender, EventArgs e)
{
// Call method to show random country
DisplayCountry();
}
private void CheckAnswerButton_Click(object sender, EventArgs e)
{
// Declare integer variables for the counters and set to 0
int correctCounter = 0;
int incorrectCounter = 0;
// If the input is correct, +1 for the correct counter
if (currentCountry.capital == capitalAnswerTextBox.Text)
{
correctCounter++;
correctLabel.Text = correctCounter.ToString();
}
// If the input is incorrect, +1 for the incorrect counter
else
{
incorrectCounter++;
incorrectLabel.Text = incorrectCounter.ToString();
}
}
private void NextQuestionButton_Click(object sender, EventArgs e)
{
// Clears input TextBox
capitalAnswerTextBox.Text = string.Empty;
DisplayCountry();
}
}
{
//声明结构
结构国家
{
//声明字符串
公共字符串countryName;
公共资本;
}
公共部分类Form1:Form
{
//为CourseInfo创建列表
私有列表countryList=新列表();
国家当前国家;
公共表格1()
{
初始化组件();
}
私有void ReadFile()
{
尝试
{
//调用StreamReader以使用导入的文件
StreamReader输入文件;
弦线;
国家/地区条目=新国家/地区();
//分隔符,用于分隔文本文件中的值
char[]delim={',};
//打开文本文件
inputFile=File.OpenText(“countries.txt”);
而(!inputFile.EndOfStream)
{
line=inputFile.ReadLine();
//标记由分隔符“,”分隔的字符串
string[]tokens=line.Split(delim);
entry.countryName=tokens[0];//国家/地区的标记化条目
entry.capital=tokens[1];//资本的标记化条目
countryList.Add(条目);
}
}
捕获(例外情况除外)
{
//显示错误消息
MessageBox.Show(例如Message);
}
}
私人国家()
{
//创建随机变量
Random rand=新的Random();
//从名单中随机选择的国家是美国
int countryPosition=rand.Next(countryList.Count);
//选定国家
currentCountry=countryList[countryPosition];
//在标签中显示所选国家/地区
countryAnswerLabel.Text=currentCountry.countryName;
}
私有无效退出按钮单击(对象发送者,事件参数e)
{
//关闭窗体
这个。关闭();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
//调用方法将StreamReader与文件一起加载
ReadFile();
}
私有void QuizButton_单击(对象发送者,事件参数e)
{
//调用方法以显示随机国家/地区
显示国家();
}
私有无效检查应答按钮\单击(对象发送者,事件参数e)
{
//为计数器声明整数变量并设置为0
int校正计数器=0;
int不正确计数器=0;
//如果输入正确,+1表示正确的计数器
if(currentCountry.capital==capitalAnswerTextBox.Text)
{
计数器++;
correctLabel.Text=correctCounter.ToString();
}
//如果输入不正确,+1表示计数器不正确
其他的
{
不正确计数器++;
incorrectLabel.Text=incorrectCounter.ToString();
}
}
私有void NextQuestionButton_单击(对象发送者,事件参数e)
{
//清除输入文本框
capitalAnswerTextBox.Text=string.Empty;
显示国家();
}
}
请注意,每当执行
CheckAnswerButton\u单击
,变量correctCounter
和incorrectCounter
都会初始化为0。因此,每次按下按钮,您都会再次开始从0开始计算答案。因此,您将始终将标签的文本之一设置为“1”
。如果标签已经显示了“1”
,那么它看起来好像“什么都没做”
因此,您应该将correctCount
和incorrectCounter
的声明移动到CheckAnswerButton\u单击方法之外:
// Declare integer variables for the counters and set to 0
int correctCounter = 0;
int incorrectCounter = 0;
private void CheckAnswerButton_Click(object sender, EventArgs e)
{
// If the input is correct, +1 for the correct counter
if (currentCountry.capital == capitalAnswerTextBox.Text)
{
correctCounter++;
correctLabel.Text = correctCounter.ToString();
}
// If the input is incorrect, +1 for the incorrect counter
else
{
incorrectCounter++;
incorrectLabel.Text = incorrectCounter.ToString();
}
}
这样,在返回CheckAnswerButton\u Click
后,它们将保留其值。您的int
变量都是本地定义的,因此,无论您单击按钮多少次,它们的值都从零开始。++
。请参见:。是的,您说得对……我现在明白了。感谢您的快速帮助utton是有效的,只是你的代码中有一个bug。也许标题有误导性。也许更像“按下按钮后的结果不是预期的”会让这篇文章更清晰一些。