C#中的Windows窗体取消事件

时间:2012-07-27 02:40:51

标签: c# windows forms

我正在使用Windows Forms创建我的第一个C#应用程序,我遇到了一些麻烦。我试图验证放在DataGridView控件的特定单元格内的内容。如果内容无效,我想警告用户并以红色突出显示单元格的背景。此外,我想取消该事件,以防止用户移动到另一个单元格。当我尝试这样做时,消息框成功显示,但背景颜色永远不会改变。有谁知道为什么?这是我的代码:

        private void dataInventory_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {

        switch (e.ColumnIndex)
        {
            case 0:
                if (!Utilities.validName(e.FormattedValue))
                {
                    dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Red;
                    MessageBox.Show("The value entered is not valid.");
                    e.Cancel = true;
                }
                else
                {
                    dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.White;
                }
                break;

//更多东西

2 个答案:

答案 0 :(得分:1)

MessageBoxes不是验证期间使用的最佳工具。通过制作e.Cancel = true;,您告诉网格不要让单元格失去焦点,但MessageBox使光标离开控件。事情变得有点乱。

着色部分应该正常工作,但由于单元格突出显示,您可能没有看到结果。

尝试更改代码以使用网格显示错误图标的功能:

dataGridView1.Rows[e.RowIndex].ErrorText = "Fix this";
e.Cancel = true;

使用CellEndEdit事件清除消息。

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
  dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
}

请参阅Walkthrough: Validating Data in the Windows Forms DataGridView Control

答案 1 :(得分:0)

使用以下代码

DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
CellStyle.BackColor = Color.Red;
dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle;