Как я могу ограничить введенные цифры в ячейке таблицы данных? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу создать таблицу данных, которая принимает только цифры (целые или двойные). Когда число двойное, я хочу сохранить только 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;
        }

   }

1 Ответ

0 голосов
/ 14 июня 2019

Использовать событие проверки

 dataGridView1.CellValidating += (s, eargs) => eargs.Cancel = !new Regex(@"^\d*(.\d|.\d\d)$").IsMatch(eargs.FormattedValue.ToString());

Вы также можете дать всплывающую подсказку о том, почему вы не разрешаете пользователю вводить значение, например, если вы не можете ввести более двух десятичных цифр и т. Д., Вы также можете добавить несколько мигающих цветов.добавить больше специй

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...