Question

J'utilise le Infragistics UltraWinGrid (version Win 9.1). Le comportement par défaut est de permettre à l'utilisateur de taper du texte dans une cellule. Quand on copie plusieurs cellules à partir d'une feuille de calcul Excel, seules les données de la première cellule seront collées dans le UltraWinGrid.

On peut facilement changer le comportement à coller plusieurs cellules en définissant les cellules UltraWinGrid être avec uneditable CellClickAction.CellSelect ; Malheureusement, quand vous faites cela, vous ne pouvez pas entrer des données dans les cellules.

J'ai essayé de modifier ces paramètres avec les événements pour InitializeLayout, KeyDown et 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;
    }

Je peux maintenant clé des valeurs dans les cellules à nouveau. Le problème est, quand j'appuyez sur [Ctrl] [v] pour la pâte, le KeyPressEventArgs.KeyChar est 22 et il n'y a pas de « v ». Vous pouvez voir ma tentative futile de contourner ce problème dans le délégué ugridQuoteSheet_KeyPress. Quelle est la bonne combinaison de la gestion des événements et CellClickAction paramètre pour permettre à la fois copier-coller et en tapant dans une cellule du UltraWinGrid?

Était-ce utile?

La solution

Après un peu lecture plus attentive du poste mentionné plus haut ( http : //forums.infragistics.com/forums/p/23690/86732.aspx#86732 ) Je suis en mesure de résoudre ce problème.

Cela peut être tout traité dans l'événement KeyPress après avoir réglé UltraWinGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect; en cas InitializeLayout bien sûr.

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

Je ignorais comment gérer la pression de touche simultanée, [ctrl] [v]. Le Char.IsControl (e.KeyChar) fait le tour ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top