我有一个带有 datagridview 的表单,当用户开始为第一行的第一个单元格输入值时,也可以按 f2 键提交该值,但我无法访问单元格值,除非用户点击选项卡并转到另一个单元格
以下是我在按下 f2 时访问单元格值的代码
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
var key = new KeyEventArgs(keyData);
ShortcutKey(this, key);
return base.ProcessCmdKey(ref msg, keyData);
}
protected virtual void ShortcutKey(object sender, KeyEventArgs key)
{
switch (key.KeyCode)
{
case Keys.F2:
MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());
break;
}
}
dataGridView1.SelectedCells[0].Value 返回 null
最佳答案
不如做这样的事情。连接到 DataGridView 的“EditingControlShowing”事件并在那里捕获 F2。一些代码:
public partial class Form1 : Form
{
private DataTable table;
public Form1()
{
InitializeComponent();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(HandleEditingControlShowing);
this.table = new DataTable();
table.Columns.Add("Column");
table.Rows.Add("Row 1");
this.dataGridView1.DataSource = table;
}
private void HandleEditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var ctl = e.Control as DataGridViewTextBoxEditingControl;
if (ctl == null)
{
return;
}
ctl.KeyDown -= ctl_KeyDown;
ctl.KeyDown += new KeyEventHandler(ctl_KeyDown);
}
private void ctl_KeyDown(object sender, KeyEventArgs e)
{
var box = sender as TextBox;
if (box == null)
{
return;
}
if (e.KeyCode == Keys.F2)
{
this.dataGridView1.EndEdit();
MessageBox.Show(box.Text);
}
}
想法很简单,您挂接到 EditingControlShowing 事件。每次单元格进入编辑模式时,都会被触发。很酷的是,它公开了实际的底层控件,您可以将其转换为实际的 winforms 控件,并像往常一样连接到它的所有事件。
关于c# - 在编辑其值时访问 Datagridview 单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877505/