Frage

Ich bin mit dem Infragistics UltraWinGrid (Version Win 9.1). Das Standardverhalten ist, den Benutzer zu geben Sie den Text in eine Zelle zu ermöglichen. Wenn man Kopien mehr Zellen aus einer Excel-Tabelle, nur die Daten der ersten Zelle in die UltraWinGrid eingefügt werden.

Man kann sich leicht das Verhalten ändern mehrere Zellen einfügen, indem Sie die UltraWinGrid Zellen Einstellung sein uneditable mit CellClickAction.CellSelect ; Leider geben Sie, wenn Sie dies tun, können die Daten nicht in die Zellen.

So habe ich versucht, diese Einstellungen mit den Ereignissen für InitializeLayout zu modifizieren, KeyDown und KeyPress.

    private void ugridQuoteSheet_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
        e.Layout.Override.AllowMultiCellOperations = AllowMultiCellOperation.All;
        e.Layout.Override.CellClickAction = CellClickAction.CellSelect;
    }

    //Event used to circumvent the control key from choking in
    //the KeyPress event. This doesn't work btw.
    private void ugridQuoteSheet_KeyDown(object sender, KeyEventArgs e)
    {
        UltraGrid grid = (UltraGrid)sender;

        if (e.Control == true)
        {
           e.SuppressKeyPress = true;
        }
    }

    // This event comes after the KeyDown event. I made a lame attempt to stop
    // the control button with (e.KeyChar != 22). I lifted some of this from 
    // the Infragistics post: http://forums.infragistics.com/forums/p/23690/86732.aspx#86732
    private void ugridQuoteSheet_KeyPress(object sender, KeyPressEventArgs e)
    {
        UltraGrid grid = (UltraGrid)sender;
        if ((grid != null) && (grid.ActiveCell != null) && (!grid.ActiveCell.IsInEditMode) && (e.KeyChar != 22))
        {
            grid.PerformAction(UltraGridAction.EnterEditMode);
            EditorWithText editor = (EditorWithText)grid.ActiveCell.EditorResolved;
            editor.TextBox.Text = e.KeyChar.ToString();
            editor.TextBox.SelectionStart = 1;
        }
    }

    // This puts the grid in CellSelect mode again so I won't edit text.
    private void ugridQuoteSheet_AfterCellUpdate(object sender, CellEventArgs e)
    {
        this.ugridQuoteSheet.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect;
    }

Ich kann jetzt Schlüssel in Werte in die Zellen wieder. Das Problem ist, wenn ich [ctrl] [v] für Paste drücken, ist die KeyPressEventArgs.KeyChar 22 und es gibt keine 'v'. Sie können meinen vergeblichen Versuch zu umgehen dieses Problem in den ugridQuoteSheet_KeyPress Delegierten sehen. Was ist die richtige Kombination von Event-Handling und CellClickAction Einstellung sowohl Copy-Paste und das Schreiben in eine Zelle des UltraWinGrid?

ermöglichen
War es hilfreich?

Lösung

Nach etwas mehr sorgfältigem Lesen der Post schon erwähnt ( http : //forums.infragistics.com/forums/p/23690/86732.aspx#86732 ) Ich habe dieses Problem in Angriff zu nehmen kann.

Dies kann alle innerhalb des KeyPress Ereignis behandelt werden, nachdem UltraWinGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect Einstellung; im InitializeLayout Ereignisse natürlich.

    private void ugridQuoteSheet_KeyPress(object sender, KeyPressEventArgs e)
    {
        UltraGrid grid = (UltraGrid)sender;

        if (!Char.IsControl(e.KeyChar) && grid != null && grid.ActiveCell != null &&
            grid.ActiveCell.EditorResolved is EditorWithText && !grid.ActiveCell.IsInEditMode)
        {
            grid.PerformAction(UltraGridAction.EnterEditMode);
            EditorWithText editor = (EditorWithText)grid.ActiveCell.EditorResolved;
            editor.TextBox.Text = e.KeyChar.ToString();
            editor.TextBox.SelectionStart = 1;
        }
    }

Ich war unwissend, wie der gleichzeitigen Tastendruck zu behandeln, [ctrl] [v]. Die Char.IsControl (e.KeyChar) funktioniert der Trick hier.

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