C# - if else语句,用于按钮单击和函数调用

时间:2015-06-27 20:50:34

标签: c# winforms button

我正在开发一个系统,该系统涉及将一组值输入到一系列文本框中,然后单击一个按钮,将每个文本框中的值添加到相应的List<>中。 单击按钮后,我使用Focus()函数将焦点放在文本框组(txtHR)顶部的文本框中。使用光标单击按钮时,此工作正常。

唯一的问题是:

由于要写入很多文本框,我创建了一个函数,其中按 Enter 键将焦点移动到文本框列表中(使数据输入更快)。这导致焦点在按钮btnSaveData上,并再次点击 Enter 键有效地执行按钮单击。 这会将焦点返回到txtHR,但系统也会按下 Enter 键并将焦点移动到下一个文本框中。

有没有办法纠正这个?我猜它会涉及一个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);
        }
    }

1 个答案:

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