TextBox с привязкой к данным: невозможно выйти

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

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

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

Какие-либо предложения?


person Muxa    schedule 20.10.2008    source источник


Ответы (3)


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

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

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

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

person orj    schedule 20.10.2008
comment
Спасибо! Установка для свойства AutoValidate формы значения EnableAllowFocusChange сработала. - person Muxa; 21.10.2008

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

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

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

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

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

person Bevan    schedule 22.10.2008

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

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

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

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

и дальше:

Не удается выйти из пустого текстового поля

person Thomas Brooks    schedule 14.03.2012