2009-03-02 68 views
1

我有一个工作的WinForm,它处理我的客户数据库中的搜索功能。它包含以下控件:根据活动控件更改AcceptButton

  • 你在那里输入您的搜索字符串(A)
  • “搜索” 按钮(B)
  • 一个DataGridView(C),返回搜索
  • 结果的文本框
  • “确定” 按钮(d)和 “取消” 按钮(E)

我试图旁边accieve是这样的:

  1. 当A是活性的的AcceptButton(ENTER)应该连接到b
  2. 当按下B或输入C应成为活性
  3. 当C是活性的的AcceptButton应该链接到d

我意识到这是一个有点大的问题,所以如果你知道答案,不要犹豫,只回答一个子弹标记。

编辑:我已经解决了上述要求1和3的实施,但我仍然在寻找第二个答案。为了说明,当搜索开始时(意思是我按下了键盘上的输入或鼠标的搜索按钮),我希望焦点转移到DataGridView的第一行。

回答

3

当你的文本改变事件的textBox设置的AcceptButton为“搜索”:

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

所以我想这意味着另一个dataGridView_DataMemberChanged第2部分? – Sakkle 2009-03-03 12:27:18

1

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

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

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

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