Как я могу эмулировать нажатие клавиши с помощью копирования и вставки в Infragistics UltraWinGrid?

Я использую Infragistics UltraWinGrid (версия Win 9.1). Поведение по умолчанию — разрешить пользователю вводить текст в ячейку. При копировании нескольких ячеек из электронной таблицы Excel данные только первой ячейки будут вставлены в UltraWinGrid.

Можно легко изменить поведение для вставки нескольких ячеек, установив для ячеек UltraWinGrid недоступность для редактирования с помощью CellClickAction.CellSelect; К сожалению, когда вы делаете это, вы не можете вводить данные в ячейки.

Поэтому я попытался изменить эти настройки с помощью событий InitializeLayout, KeyDown и 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;
    }

Теперь я снова могу вводить значения в ячейки. Проблема в том, что когда я нажимаю [ctrl] [v] для вставки, KeyPressEventArgs.KeyChar равен 22, а «v» отсутствует. Вы можете увидеть мою тщетную попытку обойти эту проблему в делегате ugridQuoteSheet_KeyPress. Какова правильная комбинация обработки событий и настройки CellClickAction, позволяющая выполнять копирование и вставку, а также ввод в ячейку UltraWinGrid?


person Blanthor    schedule 28.01.2010    source источник


Ответы (1)


После более внимательного прочтения сообщения, упомянутого ранее ( forums.infragistics.com/forums/p/23690/86732.aspx#86732 ) Мне удалось решить эту проблему.

Все это можно обработать в событии KeyPress после установки UltraWinGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect; в событии InitializeLayout, конечно.

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

Я не знал, как обрабатывать одновременное нажатие клавиши [ctrl][v]. Char.IsControl(e.KeyChar) делает свое дело.

person Blanthor    schedule 29.01.2010