2016-07-28 42 views
0

我想在PropertyGrid上實現輸入驗證。我發現我需要一個TypeConverter並在ConvertFrom方法中拋出異常。這工作得很好,只是它顯示了一個標準的「消息框」。我想展示我自己的。根據MSDN,在IsValid方法中捕捉到了異常。所以我試圖覆蓋它,做我的事情,但它甚至不會觸發。TypeConverter IsValid未啓用

我的代碼:

public class ParameterNameConverter : TypeConverter 
{ 
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
    { 
     Debug.Print("ConvertFrom"); 
     if (Convert.ToString(value).Contains(" ")) 
     { 
      throw new NotSupportedException("Invalid input"); 
     } 
     return value; 
    } 

    public override bool IsValid(ITypeDescriptorContext context, object value) 
    { 
     MessageBox.Show("Invalid input"); 
     return false; 
    } 
} 

回答

0

這是從Microsoft Reference SourceIsValid()的代碼。你可以看到IsValid()自己調用ConvertFrom()本身並嘗試捕獲它。因此,您需要執行類似的操作,從您自己的IsValid()方法調用自己的ConvertFrom()方法,然後處理該異常。如果您根本不覆蓋IsValid(),那麼基本方法IsValid()會默默地吃掉您的exception並返回標準false響應。

雖然在我聽起來像你的IsValid()方法永遠不會被調用,如果你沒有看到自己的消息框從您的示例代碼彈出?但是,這是一個不同的問題:P

+0

嗯謝謝,它以某種方式幫助我。似乎要走的路是自己調用IsValid(),但我不知道在哪裏...... ConferFrom會是個好地方,因爲我在那裏有新的值,但是如果IsValid返回,我該怎麼辦?假...如果我拋出一個異常,我最終有2個消息框... –