情况:我已经将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);
}
}
通过单击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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句