Wie mache ich das Drücken der Eingabetaste, was den Fokus in die unten stehende Zelle wie das Standardverhalten von Excel bewegt?

StackOverflow https://stackoverflow.com/questions/2247979

Frage

Ich verwende eine Infragistik ultrawingrid v9.1. Ich möchte dem Benutzer erlauben, numerische Daten in eine Zelle einzugeben, drücken Sie Eintreten Und dann konzentrieren Sie sich auf die Zelle unten, wie Sie in Excel sehen. Es scheint, dass das KeyUp -Ereignis besser sein könnte als das Schlüsselereignis dafür, aber ich mache immer wieder eine Ausnahme, dass ich über die Grenzen des Ultrawingrids hinausgegangen bin, obwohl ich oben in einem vollständigen Gitter anfange. Hier ist der Code, den ich ausprobiert habe:

    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();
        }
    }

Ich erwartete, dass dies die Zelle in derselben Spalte machen würde, aber eine Zeile unten, um die aktive Zelle mit dem Aufruf zu werden.

Stattdessen wird eine Ausnahme ausgelöst:

Eine Ausnahme des Typs 'System.IndexoutoFrangeException' trat in Infragistics2.shared.v9.1.dll auf, wurde jedoch nicht in Benutzercode behandelt. Zusätzliche Informationen: Index lag außerhalb der Grenzen des Arrays.

Da ich in Reihe 0 bin und es eine Reihe 1 gibt, ist dies eine Überraschung für mich. Die Werte für Currentrow und Col betragen 0 bzw. 28. Was wäre ein besserer Ansatz? Übrigens kann ich das noch einmal tun, die Zelle unten, wobei die Werte Stromrow = 1 und col = 28 sind. Die gleiche Ausnahme wird ausgelöst.

War es hilfreich?

Lösung

Jemand beantwortete meine Frage auf die Infragistik 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);
        }
    }

Andere Tipps

Ich weiß nicht, ob das, was ich sage, auch für den V9.1 gültig ist, aber Sie können auch so etwas tun:

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);
            }
        }

Nach der Verwendung grid.PerformAction(UltraGridAction.BelowCell) Die aktive Zeile ändert sich, aber die nächste Zelle befindet sich nicht im Bearbeitungsmodus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top