2011-08-08 11 views
2

これはサンプルコードである:なぜtextedit検証ハンドラが2回呼び出されますか?

ButtonEdit be = new ButtonEdit() 
{ 
    DisplayFormatString = MyDisplayFrm, 
    MaskType = MaskType.RegEx, 
    Mask = "[-+]?([0-9]*[,.])?[0-9]+([eE][-+]?[0-9]+)?", 
    ValidateOnTextInput = false 
}; 
Binding bindingValue = new Binding() { Source = PropItem, Path = new PropertyPath("Value"), Mode = BindingMode.TwoWay }; 
BindingOperations.SetBinding(be, ButtonEdit.EditValueProperty, bindingValue); 
be.SetValue(Grid.ColumnProperty, 0); 
be.Validate += be_Validate; 

void be_Validate(object sender, ValidationEventArgs e) 
{ 
    if ((Convert.ToDouble(e.Value) <= MaxVal) && (Convert.ToDouble(e.Value) >= MinVal)) return; 
    MessageBoxResult mbr = MessageBox.Show("The value in not in the suggested range, do you want to continue?", "Min/Max Range validation", MessageBoxButton.YesNo); 
    if (mbr == MessageBoxResult.Yes) 
    { 
     return; 
    } 
    else 
    { 
     e.IsValid = false; 
     e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning; 
     e.ErrorContent = "Value is not in the suggested range. Please correct."; 
    } 
} 

iが範囲外の値を変更し、フォーカスを変更すると、私は二回のメッセージボックスを受け取ります。 1つは値を変更するためのもの、もう1つはディスプレイを変更するためのものです。エディタは適切な科学ディスプレイに値(2倍)を表示するためです。

表示を変更するときに、テキストエディット(または上記のButtonEditの例)で確認を確認しないようにするにはどうすればよいですか?私はそれが最初の場所ではないはずですか? EditValueプロパティは変更されず、表示(Textプロパティ)のみが変更されます。事前に

感謝:)

答えて

0

私の知る限り、あなたがValidatingイベントを処理する必要があり、値が正しくない場合、そのイベント内、次に内、e.Cancelがtrueに設定このヘルプ記事 BaseEdit.InvalidValue event

を確認してくださいInvalidValueイベントでは、無効なエントリのビジュアルキューを提供することができます。

希望これはちょうどあなたがWPF DXEditor ButtonEditないXtraEditors.ButtonEditについて話している実現し、この答えを許しなさい

+0

に役立ちます。 – AussieALF