2015-06-27 50 views
0

我正在处理一个系统,该系统涉及将一组值输入到一系列文本框中,然后单击一个按钮,将每个文本框中的值添加到它们各自的List<>。 点击按钮后,我使用Focus()函数将焦点放在文本框组顶部的文本框中(txtHR)。当使用光标单击按钮时,这可以正常工作。C# - if else声明按钮单击和函数调用

唯一的问题是这样的:

由于有很多文本框的要写入,我做在那里打了输入键将焦点下移文本框列表中选择一个功能(使数据录入更快)。这导致焦点然后在按钮btnSaveData上,并且击中输入键再次有效地执行按钮点击。 这会将焦点返回到txtHR,但系统也会接受输入按键并将焦点移到下一个文本框中。

有没有办法解决这个问题?我猜这将涉及一个if/else声明基于它是否是按钮点击或按键,调用txtHR.Focus()

代码两者btnSaveData_ClickControl_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); 
     } 
    } 
+4

为什么让Enter键改变焦点? Tab键和Textbox控件的正确顺序应该自动处理 - 不需要模拟Tab键。 – NoChance

+1

是否也挂钩到该事件处理程序的按钮的KeyUp事件? – Chris

回答

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); 
    } 
}