Domanda

Sto usando l'Infragistics UltraWinGrid (versione Win 9.1). Il comportamento predefinito è quello di consentire all'utente di digitare del testo in una cella. Quando uno le cellule più copie di un foglio di calcolo di Excel, solo i dati del primo cellulari saranno incollati nella UltraWinGrid.

Si può facilmente modificare il comportamento di incollare più celle impostando le cellule UltraWinGrid essere modificabile con CellClickAction.CellSelect ; Purtroppo quando si esegue questa operazione, non è possibile digitare i dati nelle celle.

Così ho tentato di modificare queste impostazioni con gli eventi per InitializeLayout, KeyDown e 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;
    }

ora posso chiave nei valori nelle cellule di nuovo. Il problema è che, quando si preme [Ctrl] [v] per pasta, il KeyPressEventArgs.KeyChar è 22 e non v'è alcun 'v'. È possibile vedere il mio futile tentativo di aggirare questo problema nel delegato ugridQuoteSheet_KeyPress. Qual è la giusta combinazione di gestione degli eventi e l'impostazione per consentire sia Copia-Incolla e digitando in una cella del UltraWinGrid?

CellClickAction
È stato utile?

Soluzione

Dopo un po 'più attenta lettura del post citato prima ( http : //forums.infragistics.com/forums/p/23690/86732.aspx#86732 ) Sono stato in grado di affrontare questo problema.

Questo può essere tutto gestito all'interno KeyPress dopo aver impostato UltraWinGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect; in caso InitializeLayout naturalmente.

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

ero ignaro di come gestire la pressione di un tasto simultanea, [Ctrl] [v]. Il Char.IsControl (e.KeyChar) fa il trucco qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top