2017-10-12 12 views
0

私は選択したラジオボタンを受け入れる(入力キー)簡単なコードを作った。答えと一致する場合はラジオボタンのテキストをチェックしてください。しかし、このコードは余りにも冗長です。簡単にする方法はありますか?C#ラジオボタンkeydownイベント

private void btn1_KeyDown(object sender, KeyEventArgs e) 
{ 
    var row = dTable.Rows[currentRow]; 
    var ans = row["ANSWER"].ToString(); 
    if (btn1.Text == ans) 
    { 
    scoreAdd(); 
    MessageBox.Show("Correct"); 
    } 
    else 
    { 
    MessageBox.Show(ans); 
    } 
    currentRow++; 
    nextRow(); 
} 

private void btn3_KeyDown(object sender, KeyEventArgs e) 
{ 
    var row = dTable.Rows[currentRow]; 
    var ans = row["ANSWER"].ToString(); 
    if (btn3.Text == ans) 
    { 
     scoreAdd(); 
     MessageBox.Show("Correct"); 
    } 
    else 
    { 
      MessageBox.Show(ans); 
    } 
    currentRow++; 
    nextRow(); 
} 

private void btn4_KeyDown(object sender, KeyEventArgs e) 
{ 
    var row = dTable.Rows[currentRow]; 
    var ans = row["ANSWER"].ToString(); 
    if (btn4.Text == ans) 
    { 
     scoreAdd(); 
     MessageBox.Show("Correct"); 
    } 
    else 
    { 
      MessageBox.Show(ans); 
    } 
    currentRow++; 
    nextRow(); 
} 
+0

[コードレビュー](HTTPS:/を/codereview.stackexchange.com)。 – Sinatr

+3

'bender'を' btn4.Text'の代わりに '((Button)sender).Text'というテキストを得るために、' Button'(あるいはあなたが使っているコントロールの種類)にキャストすることができます。その時点でコードの残りの部分は同じなので、すべてのボタンに1つのハンドラを使用できます。 – David

答えて

1

ようなロジックのための一般的な方法作成:

protected void TheLogic(string txt) 
{ 
    var row = dTable.Rows[currentRow]; 
    var ans = row["ANSWER"].ToString(); 
    if (txt == ans) 
    { 
    scoreAdd(); 
    MessageBox.Show("Correct"); 
    } 
    else 
    { 
    MessageBox.Show(ans); 
    } 
    currentRow++; 
    nextRow(); 
} 

そして対応するパラメータのテキストを使用して、各KeyDown場合にTheLogic関数を呼び出し、例えば、

private void btn3_KeyDown(object sender, KeyEventArgs e) 
{ 
    TheLogic(btn3.Text); 
} 

private void btn4_KeyDown(object sender, KeyEventArgs e) 
{ 
    TheLogic(btn4.Text); 
} 
1
private void button_KeyDown(object sender, KeyEventArgs e) 
{ 
    Button button = sender as Button; 

    var row = dTable.Rows[currentRow]; 
    var ans = row["ANSWER"].ToString(); 
    if (button.Text == ans) 
    { 
     scoreAdd(); 
     MessageBox.Show("Correct"); 
    } 
    else 
    { 
     MessageBox.Show(ans); 
    } 
    currentRow++; 
    nextRow(); 
} 

ジャストボタンとして送信者をキャストし、そこからテキストを取得します。

すべてのイベントボタンをbutton_KeyDownにバインドします。

この方法では、1つの方法しかありません。

関連する問題