私は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
を作成しました。
は、ユーザーがのような入力を続けるとしての私のマスクの変更を言ってみましょう:7桁の数字8桁ため
999(999)/ 99のための6桁
999.999から9のための
999.999を
メモマスクでValueChangedイベントが発生しないようにするため、KeyDownを使用する必要があります。
私はキーダウンを処理し、このことをうまく動作させることができました。
質問:貼り付けイベントの処理方法は? (キーボードとマウスの両方ペーストイベントから)
私がコントロールにWNDPROCを上書きする方法を知って、私はすでに前にそれを数回やりました。
ここに問題がありますRepositoryItemTextEdit
クラスはオーバーライドするwndProcを持つコントロールではありません。
私は少し掘っ上記のクラスは
public TextEdit OwnerEdit { get; }
を持っており、それがイベントを処理本当の男だ見つけました。
残念ながら、devxpressは設定できないメンバーとして残しました。
今では、マスクが貼り付けられた値を切り捨てるため、999.999の値をコピー貼り付けの999.999-9に置き換えることはできません。
は、それはまた、TextEdit
クラスのインプレースインスタンスのプロパティを保持するために使用され