我正在开发一个系统,该系统涉及将一组值输入到一系列文本框中,然后单击一个按钮,将每个文本框中的值添加到相应的List<>
中。
单击按钮后,我使用Focus()
函数将焦点放在文本框组(txtHR
)顶部的文本框中。使用光标单击按钮时,此工作正常。
唯一的问题是:
由于要写入很多文本框,我创建了一个函数,其中按 Enter 键将焦点移动到文本框列表中(使数据输入更快)。这导致焦点在按钮btnSaveData
上,并再次点击 Enter 键有效地执行按钮单击。
这会将焦点返回到txtHR
,但系统也会按下 Enter 键并将焦点移动到下一个文本框中。
有没有办法纠正这个?我猜它会涉及一个if/else
语句,该语句是基于按钮点击还是按下txtHR.Focus()
的按键。
btnSaveData_Click
和Control_KeyUp
的代码如下所示:
private void btnSaveData_Click(object sender, EventArgs e) //To be clicked while clock is running
{ //turn inputted data into outputted data
//take the data in the input boxes and...
updateLists(); //add to respective list
saveReadings(); //append each variable to file
//return cursor to top box in list ready for next data set
txtHR.Focus();
}
private void Control_KeyUP(object sender, KeyEventArgs e) //for selected textboxes and buttons only
{
if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
{
this.SelectNextControl((Control)sender, true, true, true, true);
}
}
答案 0 :(得分:1)
您可以测试以确保在执行焦点更改之前按下Enter键的控件是TextBox
,或者如果还有其他类型的控件需要此焦点转发行为,请测试是否这是保存按钮。像这样:
private void Control_KeyUP(object sender, KeyEventArgs e) //for selected textboxes and buttons only
{
// Bail if not on a TextBox.
if ((sender as TextBox) == null) // **or instead** if ((sender as Button) == this.btnSaveData)
return;
if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
{
this.SelectNextControl((Control)sender, true, true, true, true);
}
}