【问题标题】:How to run a code only if a Cell, not a Header, in DataGridView is doubleClicked?仅当双击 DataGridView 中的单元格而不是标题时如何运行代码?
【发布时间】:2012-07-02 12:05:14
【问题描述】:
private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow r in dgv.Rows) r.Visible = false;
}

此代码有效,但如果双击 ColumnHeaders(不仅是单元格)也有效?
我只想在双击单元格时运行它。
CellDoubleClick 应该是指 CellDoubleClick 而不是 HeaderDoubleClick。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:
    private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
                if (e.RowIndex != -1) {
                    //do work
                }
            }
    

    【讨论】:

    • 感谢大家。所有解决方案都有效。但是,有人可以解释一下,如果 ColumnHeaderDoubleClick 处理程序在另一个处理程序上运行,那么它的目的是什么?看起来很蠢。
    • 在您的问题中您说您正在使用 CellDoubleClick。由于 RowHeader 也是一个单元格,因此会触发该事件。如果您使用了 ColumnHeaderDoubleClick,则此事件只会在列标题双击时触发。我希望我已经足够清楚了。
    • Cell 应该是 Cell,Header 应该是 Header。无论如何,谢谢。
    【解决方案2】:

    您可以检查e.RowIndex 是否为-1,这意味着事件发生在标题行。

    【讨论】:

      【解决方案3】:

      您可以使用DataGridViewCellEventArgs.RowIndex 检查是否单击了标题或单击了行中的任何单元格。

      【讨论】:

        【解决方案4】:

        不是最干净的方法,但您可以这样实现

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (((System.Windows.Forms.DataGridView)(sender)).CurrentCell != null)
            {
               //Do what you want here................
            }
        }
        

        【讨论】:

        • 您向@Vale 提出的问题是关于ColumnHeaderDoubleClick 的用途是什么?我能想到的一个例子是双击按列对网格进行排序
        • 排序是点击而不是 DoubleClick。在任何情况下,CellDoubleClick 都应该是 CellDoubleClick 而 HeaderDoubleClick 应该是 HeaderDoubleClick。无论如何,谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-14
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2017-11-02
        相关资源
        最近更新 更多