【问题标题】:Winforms DataGridView CellEndEdit LoopsWinforms DataGridView CellEndEdit 循环
【发布时间】:2015-03-22 21:49:36
【问题描述】:

对于一项作业,我们正在创建一个简单的电子表格程序,类似于 Excel。我的 DataGridView 中的单元格可由用户编辑,当用户编辑单元格时会发生多种情况。 与 Excel 类似,如果您在单元格 A2 中键入 =A1,则 A2 的值将更改为等于单元格 A1 的值,并且用户看到的文本会更新以反映这一点。但是,A2 的文本属性需要保持为=A1,以防 A1 的值发生变化。 在调试我的代码时,我注意到我的 CellEndEdit 函数循环了两次,尽管没有涉及循环。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        RealCell cell = spreadsheet.GetCell(e.RowIndex, e.ColumnIndex) as RealCell;

        //set the spreadsheet cell's text to reflect the user's edit
        if (dataGridView1.CurrentCell.Value != null)
        {
            cell.Text = dataGridView1.CurrentCell.Value.ToString();
        }
        MenuVisibility();
    }

这是一个大问题,因为它会多次重置单元格的文本。 CellEndEdit 函数是否应该循环两次?我怎样才能阻止这种情况发生?谢谢!

【问题讨论】:

  • 您确定两个CellEndEdit 事件都针对同一个单元格吗?此外,您是否有可能多次将该方法附加到 CellEndEdit 事件?

标签: c# winforms visual-studio datagridview


【解决方案1】:

CellEndEdit会在改变单元格值时触发。

所以在你的情况下,向A1输入值,触发CellEndEdit

那么你的代码设置A2单元格=A1的值,触发另一个CellEndEdit

如果需要手动抑制事件,可以添加布尔值来控制。

【讨论】:

  • Eric 和 Ann L. 都是对的。我最终只是没有将我的CellEndEdit 链接到事件,因此它仅在值更改时触发。我认为,布尔控件也可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
相关资源
最近更新 更多