关闭表单时触发DataGridView CellValidated事件

时间:2015-05-20 08:11:46

标签: c# winforms datagridview

情况: 我在表单上放置了一个DataGridView。在DataGridView-Object中,我检查某些单元格 - 例如,如果用户输入的金额不大于100.当用户使用Enter,Tab或箭头键离开单元格时,将执行检查。

问题: 一切正常,但当光标位于单元格中并且值大于100并且用户按下窗体上的“X” - 按钮(关闭按钮)时,仍会显示消息。

问题: 当用户单击表单上的X按钮时,如何防止MessageBox的出现?

代码示例:

private void dgv_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                const int nColumn = 2;
                if (!e.ColumnIndex.Equals(nColumn))
                {
                    return;
                }

                if (e.ColumnIndex.Equals(nColumn))
                {
                    double nMengeSource;
                    double.TryParse(dgv.Rows[e.RowIndex].Cells[fldMenge.Name].Value.ToString(),
                        out nMengeSource);

                    double nMengeLos;
                    double.TryParse(dgv.Rows[e.RowIndex].Cells[fldMengeLos.Name].Value.ToString(),
                        out nMengeLos);

                    // prüfe ob erfasste Menge die Menge im Los überschreitet
                    if (nMengeSource > nMengeLos)
                    {
                        var sMsg = String.Empty;
                        sMsg += "Warning! Value is greather than allowed!";
                        MessageBox.Show(sMsg, "Check...", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception ex)
            {
                Dialog.SetDefaultCursor();
                MessageBox.Show(MethodBase.GetCurrentMethod().Name + @"\n\n" + ex + @"\n\n" + ex.Message);
            }
        }

2 个答案:

答案 0 :(得分:1)

执行此操作的另一种方法是:

if (( check == 1 )); then
    receiver () {
        xclip -selection clipboard
    }
else
    receiver () {
        cat -n
    }
fi

printf 'foo' | receiver

我相信答案中的0xffff是多余的。您也可以这样做:

protected override void WndProc(ref Message m)
{
    if(m.Msg == 0x0010)
            this._dataGridView1.CausesValidation = false;
    base.WndProc(ref m);
}

答案 1 :(得分:0)

单击 X DataGridViewCell失去焦点,这会导致单元格上的验证触发。您希望禁止此操作,但Form关闭时仅 。但是,您无法在Form.FormClosing中执行此操作,因为在验证发生后它会被触发。但是可以使用以下方法执行此操作:

protected override void WndProc(ref Message m)
{
  switch (((m.WParam.ToInt64() & 0xffff) & 0xfff0))
  {
    case 0xf060:
      this.dataGridView1.CausesValidation = false;
      break;
  }

  base.WndProc(ref m);
}