Example #1
0
        private void dgvStateChanges_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                return;
            }

            try
            {
                var cell = dgvStateChanges.Rows[e.RowIndex].Cells[e.ColumnIndex];
                var name = dgvStateChanges.Columns[e.ColumnIndex].Name;

                // For some reason, validating against UInt16 type results in unrecoverable DGV exception on
                // wrong incoming values, so we're validating against Int16 and filtering out negative values afterwards.

                Int16 parsedValue = 0;
                if (e.FormattedValue == null || !Int16.TryParse(e.FormattedValue.ToString(), out parsedValue))
                {
                    if (!Int16.TryParse(cell.Value.ToString(), out parsedValue))
                    {
                        parsedValue = 0;
                    }
                }

                var limit = Int16.MaxValue;

                if (name == columnNextAnimation.Name)
                {
                    limit = (Int16)(_editor.Animations.Count - 1);
                }
                else if (name == columnNextFrame.Name)
                {
                    Int16 limitNew = 0;
                    if (Int16.TryParse(dgvStateChanges.Rows[e.RowIndex].Cells[4].Value.ToString(), out limitNew))
                    {
                        limit = (Int16)(_editor.GetRealNumberOfFrames(limitNew));
                    }
                }
                else if (name == columnLowFrame.Name)
                {
                    Int16 limitNew = 0;
                    if (Int16.TryParse(dgvStateChanges.Rows[e.RowIndex].Cells[3].Value.ToString(), out limitNew))
                    {
                        limit = limitNew;
                    }
                }
                else if (name == columnHighFrame.Name)
                {
                    limit = (Int16)(_editor.GetRealNumberOfFrames() - 1);
                }

                if (parsedValue > limit)
                {
                    cell.Value = limit;
                }
                else if (parsedValue < 0)
                {
                    cell.Value = (Int16)0;
                }
                else
                {
                    cell.Value = parsedValue;
                }

                if (name == columnStateId.Name)
                {
                    dgvStateChanges.Rows[e.RowIndex].Cells[0].Value = TrCatalog.GetStateName(_editor.Tool.DestinationWad.GameVersion, _editor.Moveable.Id.TypeId, (uint)parsedValue);
                }
            }
            catch (Exception ex) { }
        }