Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGridView的编辑模式下,如何使用delete键的默认功能?_C#_Datagridview - Fatal编程技术网

C# 在DataGridView的编辑模式下,如何使用delete键的默认功能?

C# 在DataGridView的编辑模式下,如何使用delete键的默认功能?,c#,datagridview,C#,Datagridview,在我的电子表格程序中,我目前有一个功能,当用户按下单元格上的delete键时,它会将单元格的值设置为空字符串;但是,当用户在编辑单元格时按delete键时,delete键的默认功能不起作用。我当前对delete键的实现如下所示: private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { if (false == dataGridView1.CurrentCell.IsInEditMode) {

在我的电子表格程序中,我目前有一个功能,当用户按下单元格上的delete键时,它会将单元格的值设置为空字符串;但是,当用户在编辑单元格时按delete键时,delete键的默认功能不起作用。我当前对delete键的实现如下所示:

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (false == dataGridView1.CurrentCell.IsInEditMode)
    {
        foreach (DataGridViewCell selected_cell in dataGridView1.SelectedCells)
        {
            Cell change_cell = _workbook.CurrentSpreadsheet.GetCell(selected_cell.RowIndex, selected_cell.ColumnIndex);

            // The text is not null nor empty
            if (false == string.IsNullOrEmpty(change_cell.Text))
            {
                change_cell.Text = "";
            }
        }
    }
    // The user is editing a cell 
    else
    {
        // When the user presses delete, use the default functionality
        // as in remove one character each press. 
    }
}

对于我的else语句,是否有一种方法可以在编辑单元格时启用delete键的默认功能

试试这个,它可以正常工作

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
    DeleteCellsIfNotInEditMode();
}

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Delete)
    {
        DeleteCellsIfNotInEditMode();
    }
}

private void DeleteCellsIfNotInEditMode()
{
    if (!dataGridView1.CurrentCell.IsInEditMode)
    {
        foreach (DataGridViewCell selected_cell in dataGridView1.SelectedCells)
        {
            selected_cell.Value = "";
        }
    }
}

我已经追查这个问题好几个小时了。在我继承的这个表单项目中,我终于找到了偷走我的删除密钥的东西。删除键已分配给我从未使用过的上下文菜单项。这会阻止在编辑单元格时执行默认操作(删除单个字符)

对于将来查看此文章的个人,请在整个搜索解决方案范围内(尽管可能在表单的Designer.cs文件中)搜索


将有助于找到窃取您的删除密钥的违规项目。

如果用户真的想删除单个字符而不是将空字符串设置到单元格中,该怎么办?这就是我试图解决的问题。好吧,我误解了您的问题。但是
deleteToolStripMenuItem\u Click
似乎是菜单项的单击事件处理程序,而不是Delete键的处理程序。Delete键笔划是否触发菜单项的单击事件处理程序?是,按Delete键触发菜单项的单击事件处理程序。我的原始实现使用dataGridView1\u KeyDown事件进行删除。该解决方案适用于在单元格中按delete键,因此我可能会返回到它。实际上,我无法重现您的问题,它正在按预期工作。看到我的代码,我必须把它作为答案发布;
.ShortcutKeys = System.Windows.Forms.Keys.Delete;