根据活动控件更改AcceptButton

时间:2009-03-02 16:03:29

标签: c# .net winforms visual-studio-2008

我有一个可以处理客户数据库中搜索功能的WinForm。它包含以下控件:

  • 您键入搜索字符串的文本框(A)
  • “搜索”按钮(B)
  • 返回搜索结果的DataGridView(C)
  • “确定”按钮(D)和“取消”按钮(E)

我接下来想要接受的是:

  1. 当A处于活动状态时,AcceptButton(enter)应链接到B
  2. 当按下B或Enter时,C应该变为活动状态
  3. 当C处于活动状态时,AcceptButton应链接到D
  4. 我意识到这是一个有点大问题,所以如果你知道答案,请不要犹豫,只回答一个子弹标记。

    编辑:我已经解决了上面要求1和3的实现,但我仍在寻找第二个问题的答案。为了澄清,当启动搜索时(意味着我已经按下键盘上的输入或鼠标的搜索按钮)我希望焦点转移到DataGridView中的第一行。

4 个答案:

答案 0 :(得分:3)

当你获得textBox的文本更改事件时,将AcceptButton设置为“Search”:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.AcceptButton = SearchButton;
    }

这里可能需要更多代码,检查字符串的长度等。

然后,一旦完成搜索并填写DataGridView,您就可以将AcceptButton设置为“OK”。

    private void dataGridView1_DataMemberChanged(object sender, EventArgs e)
    {
        this.AcceptButton = OKButton;
    }

虽然您可能不想使用此活动。

“取消”始终是CancelButton。

编辑:对于第2部分,您需要以下代码:

    private void SearchButton_Click(object sender, EventArgs e)
    {
        dataGridView1.Focus();
    }

一旦按下搜索按钮,这将使其处于活动状态,但您可能希望在填充DataGridView时执行此操作 - 以防搜索未返回任何结果。

答案 1 :(得分:1)

设置处理程序以跟踪特定控件的Control.Enter事件。当达到输入时,尝试:

this.AcceptButton = ControlThatShouldBeAcceptButton;

答案 2 :(得分:1)

private void WhateverControl_Enter(...)
{
    this.AcceptButton = myButton;
}

答案 3 :(得分:1)

您应该为DataGridViewBindingCompleteEventHandler实现一个事件侦听器。在那种情况下,您可以添加以下代码:

{
    if(grid.Rows.Count > 0)
    {
        grid.ClearSelection();
        grid.Rows[0].Selected = true;
    }
    grid.Focus();
}