2017-10-12 75 views
0

我已经做了一个简单的代码,它将接受(输入键)选定的单选按钮。如果它与答案匹配,请检查单选按钮文本。但是这个代码太冗余了,有没有办法让它更简单?C#radiobutton 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

您可以将'sender'强制转换为'Button'(或者您正在使用的任何控件类型)以获得其文本:'((Button)sender).Text'而不是'btn4.Text'。在这一点上,其余的代码是相同的,所以一个处理程序可以用于所有的按钮。 – 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和从它那里得到的文本。

并将所有事件按钮绑定到button_KeyDown。

这样你只有1个方法。