Я ищу, чтобы проверить вход в DataGridView, что имеет DataGridViewTextBoxCells. Ячейки текстового поля могут быть как со знаком, так и без знака, и int или двойными, в зависимости от того, в каком столбце находится фокус. Проблема, с которой я сталкиваюсь, заключается в определении положения каретки при нажатии клавиши.
Например, если ячейка допускает двойные числа со знаком (символ вставки <=> '^'):
- допустимое событие нажатия клавиши: ^ 12.3456 с нажатием клавиши '-' даст -12.3456
- недопустимое событие нажатия клавиши: 12.34-56 с нажатием клавиши '-' даст 12.34-56
Я не смог найти ничего, что позволило бы мне чтобы получить доступ к положению каретки во время нажатия клавиши.
private void SomeGridView_KeyPress(object sender, KeyPressEventArgs e)
{
DataGridView DGV = SomeGridView;
string curStr;
bool isFirst = DGV.CurrentCell.EditedFormattedValue == null;
curStr = isFirst ? "" : DGV.CurrentCell.EditedFormattedValue.ToString();
Type type = DGV.CurrentCell.GetType();
if (DGV.CurrentCell.GetType() == typeof(DataGridViewTextBoxCell))
{
DataGridViewTextBoxCell DGVTB = (DataGridViewTextBoxCell)DGV.CurrentCell;
//Not sure how to get caret here
}
switch ((GridDataEnum)DGV.CurrentCell.ColumnIndex)
{
case GridDataEnum.setpoint:
case GridDataEnum.SlopePoint:
e.Handled = !HelperUtils.isValidNumber(curStr, e.KeyChar, HelperUtils.TargetNumberTypeEnum.signedDouble);
break;
case GridDataEnum.lowerX:
case GridDataEnum.upperX:
case GridDataEnum.TransX:
case GridDataEnum.constY:
e.Handled = !HelperUtils.isValidNumber(curStr, e.KeyChar, HelperUtils.TargetNumberTypeEnum.unsignedDouble);
break;
}
}
Спасибо