我的应用程序工作正常,但我错过了一次点击。当我到达列表的末尾并想要转到上一个项目时,我想按两次前一个按钮,错过一次点击。当从上一个项目到最后一个项目时,前一个按钮的相同位置是我的学生班级代码。
public student(string Firstname,string Lastname,string City)
{
this.Firstname = Firstname;
this.Lastname = Lastname;
this.City = City;
}
public static List<student> listofstudents = new List<student>();
public static int i = 0;
我只是使用此代码在列表中添加学生。
private void btnCreateStudent_Click(object sender, RoutedEventArgs e)
{
student.listofstudents.Add(new student(txtFirstName.Text, txtLastName.Text,
txtCity.Text));
txtCity.Clear();
txtFirstName.Clear();
txtLastName.Clear();
student.i = -1;
}
我的下一个按钮的代码
private void btnNext_Click(object sender, RoutedEventArgs e)
{
student.i++;
if (student.i < student.listofstudents.Count )
{
txtFirstName.Text = student.listofstudents[student.i].Firstname;
txtLastName.Text = student.listofstudents[student.i].Lastname;
txtCity.Text = student.listofstudents[student.i].City;
}
else
{
MessageBox.Show("list is full");
}
}
我前一个按钮的代码
private void btnPrevious_Click(object sender, RoutedEventArgs e)
{
student.i--;
if (student.i >=0)
{
txtFirstName.Text = student.listofstudents[student.i].Firstname;
txtLastName.Text = student.listofstudents[student.i].Lastname;
txtCity.Text = student.listofstudents[student.i].City;
}
else
{
MessageBox.Show("no data");
}
}
答案 0 :(得分:0)
您的问题是一个简单的逻辑错误。让我们假设您只有两个学生条目,然后按照您的描述继续前进:
[button next clicks]
i = 0 --> show first student data
i = 1 --> show second student data
i = 2 --> show message and still show unchanged second student data
[button previous clicks]
i = 1 --> show second student data (that where already visible from i = 2)
i = 0 --> show first student data
解决方案很简单:每当您显示消息框时,您都会继续显示之前student.i
值的学生数据。因此,当超出范围时,您应该撤消对student.i
的更改:
private void btnNext_Click(object sender, RoutedEventArgs e)
{
student.i++;
if (...)
{ ... }
else
{
MessageBox.Show("list is full");
student.i--; // undo change
}
}
private void btnPrevious_Click(object sender, RoutedEventArgs e)
{
student.i--;
if (...)
{ ... }
else
{
MessageBox.Show("no data");
student.i++; // undo change
}
}