Dobrý den,
používám v mojí desktopové aplikaci DataGridView, který má jeden sloupec editovatelný. Spoléhal jsem na událost CellEndEdit, kde provádím kontrolu, zda-li hodnota odpovídá typu - např. IP adrese. Bohužel, když uživatel zadá nějaký nesmysl, např. písmeno v zmíněné IP adrese, dokážu sice zvalidovat a vyhodit MessageBox, ale co se mi nedaří - ponechat fokus editovanému poli a donutit uživatele k opravě. Uvedu příklad - MessageBox se vyhodí, ale protože uživatel k ukončení editace použil např Enter nebo něco jiného, dojde po vypsání messageboxu k přeskočení na další řádek, další MessageBox a až potom návrat na původní chybnou buňku. Viz přiložený kód, ten Enter nejde cancelnout. Řešili jste prosím někdo toto již někdy? Děkuju i za radu.
private void paramsGrid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int rowIndex = e.RowIndex;
string typeStr = ((string)paramsGrid.Rows[rowIndex].Cells["Type"].Value);
VariableType varType = typeStr.ConvertToEnum<VariableType>();
DataGridViewCell affectedCell = paramsGrid.Rows[rowIndex].Cells["Value"];
string value = (string)affectedCell.Value;
if (!ValueValidator.ValueMatch(varType, value))
{
MessageBox.Show("ERROR: Value format does not match the " + typeStr + " value type.");
paramsGrid.CurrentCell = affectedCell;
paramsGrid.BeginEdit(true);
}
}