Я хочу создать таблицу данных, которая принимает только цифры (целые или двойные). Когда число двойное, я хочу сохранить только 2 цифры после точки. (Например, 1.22) и автоматически изменить ячейку. Я создаю событие, чтобы сделать это.
Мне удалось получить рабочее событие, но когда я ставлю число с двумя цифрами после точки, последняя цифра не появляется в ячейке, и ячейка меняется.
Когда я отлаживаю с точкой останова в строке «dgvDatos [column, row] .Value = txtInCell;». Переменная txtInCell (используется для просмотра того, что написано в ячейке) имеет правильное / полное значение.
void dText_KeyPress(object sender, KeyPressEventArgs e)
{
bool dot;
if (txtInCell.Contains(".") == true)
dot = true;
else
dot = false;
//Only accept numbers
if (Char.IsDigit(e.KeyChar) || e.KeyChar == '.' || e.KeyChar == '-')
{
if (e.KeyChar == '.')
if (!dot)
{
txtInCell += e.KeyChar;
e.Handled = false;
}
else
e.Handled = true;
else
txtInCell += e.KeyChar;
if (txtInCell.Contains("."))
{
int row = dgvDatos.CurrentCell.RowIndex;
int column = dgvDatos.CurrentCell.ColumnIndex;
string[] elements = txtInCell.Split('.');
if (elements[1].Length > 1)
{
dgvDatos[column, row].Value = txtInCell;
dgvDatos.CurrentCell = this.dgvDatos[column + 1, row];
}
}
}
else if (Char.IsControl(e.KeyChar)) //Use backspace as control
{
if (e.KeyChar == '\b')
txtInCell = txtInCell.Remove(txtInCell.Length - 1);
e.Handled = false;
}
else
{
//all the other keys are disabled
e.Handled = true;
}
}