Enterキー原因のフォーカスを押して、Excelのデフォルト動作のように下のセルに移動するにはどうすればよいですか?
-
20-09-2019 - |
質問
私はインフラギースのUltrawingrid v9.1を使用しています。ユーザーがセルに数値データを入力できるようにしたい、押してください 入る そして、Excelに見られるように、以下の細胞に焦点を当ててください。キーアップイベントは、これのためのキープレスイベントよりも優れているように見えますが、フルグリッドのトップから始めても、ウルトラウィングリッドの境界を越えて行った例外を投げ続けています。これが私が試したコードです:
private void ugrid_KeyUp(object sender, KeyEventArgs e)
{
UltraGrid grid = (UltraGrid)sender;
if (e.KeyCode == Keys.Enter)
{
// Go down one row
UltraGridCell cell = grid.ActiveCell;
int currentRow = grid.ActiveRow.Index;
int col = cell.Column.Index;
grid.Rows[currentRow + 1].Cells[grid.ActiveCell].Activate();
}
}
これが同じ列にセルを作成すると予想していましたが、下の1行は、コール、grid.rows [currentrow + 1] .cells [grid.activecell] .activate()を使用してアクティブセルになります。
代わりに、例外がスローされます。
「system.indexoutofrangeexception」のタイプの例外は、infragistics2.shared.v9.1.dllで発生しましたが、ユーザーコードでは処理されませんでした。追加情報:インデックスは配列の境界外でした。
私は列0にいて、行1が存在するので、これは私にとって驚きです。 currentrowとcolの値はそれぞれ0と28です。より良いアプローチは何でしょうか?ところで、私はこれを再び行うことができます。ここで、値はcurrentrow = 1およびcol = 28です。同じ例外がスローされます。
解決
誰かがInfragistics foraについて私の質問に答えました...
private void ugrid_KeyUp(object sender, KeyEventArgs e)
{
var grid = (UltraGrid)sender;
if (e.KeyCode == Keys.Enter)
{
// Go down one row
grid.PerformAction(UltraGridAction.BelowCell);
}
}
他のヒント
私が言っていることがv9.1に対しても有効かどうかはわかりませんが、このようなこともできます。
yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0));
private void ulGrvProducts_KeyUp(object sender, KeyEventArgs e)
{
UltraGrid grid = (UltraGrid)sender;
if (e.KeyCode == Keys.Enter)
{
//Go down one row
grid.PerformAction(UltraGridAction.BelowCell);
}
}
使用した後 grid.PerformAction(UltraGridAction.BelowCell)
、アクティブ行は変更されますが、次のセルは編集モードではありません。