У меня есть XtraGrid
, а некоторые столбцы могут маскироваться в зависимости от значения другого столбца.
Мне удалось достичь этого, установив маску в редакторе в событии CustomRowCellEdit
.Как переопределить wndProc в неустанавливаемом элементе управления
Snipet ниже:
private void myGridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
if (e.Column.FieldName == "MyTargetField")
{
GridView gv = sender as GridView;
var typeValue = gv.GetRowCellValue(e.RowHandle, gv.Columns["MaskOrNotDependsOnThisField"]);
if (typeValue == DynamicMask)
{
var maskToApply = GetMaskForThisValue(gv.GetRowCellValue(e.RowHandle, gv.Columns["MyTargetField"]));
RepositoryItemTextEdit riMaskedTextEdit = new RepositoryItemTextEdit();
riMaskedTextEdit.Mask.MaskType = MaskType.Simple;
riMaskedTextEdit.Mask.UseMaskAsDisplayFormat = true;
riMaskedTextEdit.Mask.SaveLiteral = false;
riMaskedTextEdit.Mask.EditMask = maskToApply;
e.RepositoryItem = riMaskedTextEdit;
//riMaskedTextEdit.KeyDown += EditorKeyDownDinamicMask;
}
}
}
Он работал как шарм, но некоторые маски могут быть динамическими (эй я не делаю requeriments!).
Так что я раскомментировал эту строку обработчика событий и создал KeyDownEventHandler
.
Скажем, мои изменения маски, как пользователь держит печатая как:
999,999 для 6 цифр
999.999-9 для 7 цифр
999. (999)/99 для 8 цифр
Примечание. Мне нужно использовать KeyDown, потому что маска может предотвратить событие ValueChanged.
Я обработал keydown и смог заставить эту штуку работать нормально.
Вопрос: Как обрабатывать события Paste? (с обеих клавиатуры и мыши пастообразных событий)
Я знаю, как переопределить WNDPROC в элементе управления, я уже сделал это несколько раз.
Проблема здесь RepositoryItemTextEdit
класс не является элементом управления с wndProc для переопределения.
я выкопал немного и нашел выше класс имеет
public TextEdit OwnerEdit { get; }
И это реальный парень обработки событий.
К сожалению, devxpress оставил его как неустанавливаемый элемент.
Прямо сейчас пользователь не может заменить значение 999.999 на 999.999-9 при копировании, поскольку маска обрезает вставленное значение.
Обратите внимание, что также предотвращает событие ValueChaged к огню