C# 我怎样才能得到;接受;DataGridView具有焦点时触发的按钮?
我将表单显示为对话框。该表单包含DataGridView、文本框和确定/取消按钮,如下所示:C# 我怎样才能得到;接受;DataGridView具有焦点时触发的按钮?,c#,winforms,button,datagridview,C#,Winforms,Button,Datagridview,我将表单显示为对话框。该表单包含DataGridView、文本框和确定/取消按钮,如下所示: 我已经将表单的AcceptButton属性设置为OK按钮,将表单的CancelButton属性设置为Cancel按钮 我已将OK按钮的DialogResult属性设置为“OK”,将Cancel按钮的DialogResult属性设置为“Cancel” 如果文本框有焦点,则按Enter键关闭窗体,对话框结果为OK。但是,如果DataGridView具有焦点,则按Enter键不会关闭窗体 但是,按Esc
- 我已经将表单的AcceptButton属性设置为OK按钮,将表单的CancelButton属性设置为Cancel按钮
- 我已将OK按钮的DialogResult属性设置为“OK”,将Cancel按钮的DialogResult属性设置为“Cancel”
DataGridView
使用enter键移动到当前正在编辑的单元格下方的单元格。没有单个属性可以更改此行为,但可以覆盖网格的键控行为:
dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);
void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button1.PerformClick();
e.Handled = true;
}
}
这仍然让您可以使用箭头键进行导航,并且仍然允许用户添加新行(在网格底部一行输入数据时,新行就会出现)。我不确定我是否完全理解这个问题,但我会尽全力。如果我遗漏了什么,请告诉我 您应该这样做的方式是在表单中添加一个按键事件来处理Enter/Escape按键 这用于在代码隐藏中添加按键事件(可以使用设计器) 事件处理程序可以是这样的:
void SelectionPageForAutomation_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == Key.Escape)
{
btn_Cancel.PerformClick();
}
else if(e.KeyChar == Key.Enter){
btn_Okay.PerformClick();
}
}
KeyCode
,则DataGridView
的单元格在内部处理KeyDown
事件(如果单元格处于编辑模式,按Enter表示“我已完成编辑单元格”。如果选择整行,按Enter表示“添加新行”)DataGridView.AllowUsersToAddNewRows
属性设置为false,以便用户不会获得任何意外行为,然后处理DataGridView.KeyDown
事件,并在使用KeyCode引发事件时手动按下按钮。输入
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
button1.PerformClick();
}
}
表单的AcceptButton和CancelButton属性已经提供了此功能。问题是,当DataGridView有焦点时,这不起作用。+1表示我需要设置e.Handled=true。如果不这样做,DataGridView仍会处理按键。
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
button1.PerformClick();
}
}