2017-09-14 15 views
-1

アプリが正常に動作していますが、クリックが不足しています。リストの終わりに達して前の項目に移動したいときは、前のボタンを2回押して、1回のクリックを逃したいと思います。前のボタンと同じボタンが最後のアイテムから最初のボタンに移動するときは、これは学生クラスのコードです。終了または開始時にワンクリックでボタンイベントが発生しない

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

どのくらい速くクリックしますか? [MCVE](https://stackoverflow.com/help/mcve)を作成して、再生する正確な手順を記述できますか? – grek40

+0

最初に4人の生徒を作成してリストに追加します.i次のボタンを押して最後の生徒に連絡し、前の生徒に移動したいときは前のボタンを2回押す必要があります。 –

+0

'btnPrevious_Click'にブレークポイントを置くと、2回実行されますか?もしそうなら、実行ごとに 'i'の値をチェックしてください。また、最後の生徒に到達するまで、または 'MessageBox.Show("リストがいっぱいになる)まで "next"を押すことを意味します; 'がヒットしましたか? – grek40

答えて

0

あなたの問題は、単純な論理エラーです。あなたは2つだけの学生のエントリを持っていたと仮定して、説明したように前後に行くことができます:

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

あなたは正しい人です@grekそれは私が前のボタンを押したときに2回感謝を示していた論理エラーです。 –

関連する問題