Вопрос

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

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

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 .

и вкл .:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top