Как я могу эмулировать нажатие клавиши с помощью копирования и вставки в Infragistics UltraWinGrid?
-
23-09-2019 - |
Вопрос
Я использую 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?
Решение
После более внимательного прочтения упомянутого ранее поста ( http://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) здесь помогает.