2008-10-20 43 views
4

我有一個文本框綁定到窗體上的對象的屬性(實際上是幾個文本框)。這是一個對象的編輯器。當我編輯一些對象並修改其中一個文本框中的值時,我無法從文本框中退出(無論是通過選項卡還是單擊另一個文本框)。然而,情況並非總是如此 - 編輯其他對象時(相同類型的)它可以正常工作。數據綁定文本框:無法退出

這裏有一小段代碼片段:

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c") 
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount") 
txtReference.DataBindings.Add("Text", _SourceObject, "Reference") 

有什麼建議?

回答

10

聽起來像數據驗證問題。檢查表單上的控件是否將其CausesValidation屬性設置爲true或false。

還檢查窗體上的AutoValidate屬性。它可能設置爲EnablePreventFocusChange(這是默認值)。

也可能是文本框中提供的值無法轉換爲它在源數據對象上綁定到的屬性的類型。我相信Convert類是用於這個(儘管我可能在這裏是錯的)。

您可能想要查看MSDN上的this article,其中涵蓋了winforms驗證的一些細節。

+0

謝謝!將表單的AutoValidate屬性設置爲EnableAllowFocusChange工作。 – Muxa 2008-10-20 20:28:35

5

如果您的表單具有AutoValidate == EnablePreventFocusChange,那麼您將最終將焦點卡在任何驗證失敗的字段中。

請注意,如果在將值寫入對象時出現異常,則認爲驗證失敗。

嘗試在與遊標卡住的控件綁定的屬性的setter入口點設置斷點。然後,單步查看是否引發異常。

如果斷點從不觸發,則數據綁定框架內可能發生異常。

與流行相反,數據綁定框架確實會記錄錯誤和其他有用信息 - 它使用System.Diagnostics名稱空間的支持來執行此操作。我忘記了詳細信息,但它們在MSDN上 - 您應該能夠在應用程序運行時在Visual Studio的消息窗口中查看診斷信息。對於解決Databinding問題非常有用。

3

在爲了固定驗證失敗,這是由於數據綁定的不能設置DBNull.Value入textbox.text,可以添加以下行在Form_Load部分:

TextBox1.DataBindings["Text"].NullValue = string.Empty; 

每個文本框你想讓空值被正確驗證。

See more details on Microsoft Connect

和:

Can't escape empty textbox