Связанный с данными TextBox: не может выйти - PullRequest
5 голосов
/ 20 октября 2008

У меня есть текстовое поле, связанное со свойством объекта (фактически несколькими текстовыми полями) в форме. Это для редактора объекта. Когда я редактирую некоторые объекты и изменяю значения в одном из текстовых полей, я не могу выйти из текстового поля (ни вкладкой, ни нажатием другого текстового поля). Однако это не всегда так - при редактировании других объектов (того же типа) он работает нормально.

Вот фрагмент кода:

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

Есть предложения?

Ответы [ 3 ]

13 голосов
/ 20 октября 2008

Похоже, проблема проверки данных. Проверьте, не имеют ли свойства CausesValidation для элементов управления формы значение true или false.

Также проверьте свойство AutoValidate в форме. Вероятно, для него установлено значение EnablePreventFocusChange (по умолчанию).

Может также случиться, что значение, предоставляемое в текстовом поле, не может быть преобразовано в тип свойства, с которым оно связано в объекте исходных данных. Я считаю, что для этого используется класс Convert (хотя я могу ошибаться).

Возможно, вы захотите ознакомиться с этой статьей на MSDN, в которой подробно рассматривается проверка winforms.

5 голосов
/ 22 октября 2008

Если ваша форма имеет AutoValidate == EnablePreventFocusChange, то в конечном итоге фокус застрянет в любом поле, которое не проходит проверку.

Обратите внимание, что проверка считается неудачной, если есть исключение при записи значения в объект.

Попробуйте установить точку останова в точке входа установщика свойства, связанного с элементом управления, в котором застревает курсор. Затем, один шаг, чтобы увидеть, возникает ли исключение.

Если точка останова никогда не срабатывает, исключение может происходить в структуре привязки данных.

Вопреки распространенному мнению, среда привязки данных регистрирует ошибки и другую полезную информацию - для этого используется поддержка из пространства имен System.Diagnostics. Я забыл подробности, но они находятся в MSDN - вы должны иметь возможность просматривать диагностику в окне сообщений Visual Studio во время работы вашего приложения. Очень полезно для устранения проблем с привязкой данных.

3 голосов
/ 14 марта 2012

Чтобы исправить ошибку проверки, вызванную неспособностью привязки данных установить DBNull.Value в textbox.text, вы можете добавить следующую строку в раздел Form_Load:

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

для каждого текстового поля, которое вы хотите, чтобы пустое значение было правильно проверено.

Подробнее о Microsoft Connect .

и далее:

Невозможно экранировать пустое текстовое поле

...