Связанный с данными TextBox: не может выйти
-
03-07-2019 - |
Вопрос
У меня есть текстовое поле, связанное со свойством объекта (фактически несколькими текстовыми полями) в форме. Это для редактора объекта. Когда я редактирую некоторые объекты и изменяю значения в одном из текстовых полей, я не могу выйти из текстового поля (ни вкладкой, ни нажатием на другое текстовое поле). Однако это не всегда так - при редактировании других объектов (того же типа) он работает нормально.
Вот фрагмент кода:
txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")
Есть предложения?
Решение
Похоже на проблему с проверкой данных. Проверьте, не имеют ли свойства CausesValidation для элементов управления формы значение true или false.
Также проверьте свойство AutoValidate в форме. Вероятно, для него установлено значение EnablePreventFocusChange (по умолчанию).
Может также случиться, что значение, предоставляемое в текстовом поле, не может быть преобразовано в тип свойства, с которым оно связано в объекте исходных данных. Я считаю, что для этого используется класс Convert (хотя я могу ошибаться здесь).
Вы можете проверить эту статью на MSDN, которая охватывает проверка winforms в некоторых деталях. Р>
Другие советы
Если ваша форма имеет AutoValidate == EnablePreventFocusChange, то в конечном итоге фокус застрянет в любом поле, которое не проходит проверку.
Обратите внимание, что проверка считается неудачной, если существует исключение при записи значения в объект.
Попробуйте установить точку останова в точке входа установщика свойства, связанного с элементом управления, в котором застревает курсор. Затем один шаг, чтобы увидеть, возникло ли исключение.
Если точка останова никогда не срабатывает, исключение может происходить в структуре привязки данных.
Вопреки распространенному мнению, среда привязки данных регистрирует ошибки и другую полезную информацию - для этого используется поддержка из пространства имен System.Diagnostics. Я забыл подробности, но они находятся в MSDN - вы должны иметь возможность просматривать диагностику в окне сообщений Visual Studio во время работы вашего приложения. Очень полезно для устранения проблем с привязкой данных.
Чтобы исправить ошибку проверки, связанную с неспособностью привязки данных установить DBNull.Value
в textbox.text, вы можете добавить следующую строку в раздел Form_Load: р>
TextBox1.DataBindings["Text"].NullValue = string.Empty;
для каждого текстового поля вы хотите, чтобы пустое значение было правильно проверено.
см. подробнее о Microsoft Connect .
и вкл .: