Tôi đang cố gắng theo dõi nguyên nhân gây ra lỗi giao diện gây phiền nhiễu trong một ứng dụng gần đây đã được nâng cấp từ VS2003 lên VS2008 (lỗi không tồn tại trước khi di chuyển). Điều gì xảy ra là:Không thể thoát khỏi hộp văn bản trống
1) Nhấp chuột của người dùng trong hộp văn bản chứa ngày.
2) Người dùng xóa ngày
3) Người dùng cố di chuyển đến một trường khác, nhưng không thể. Không có thông báo lỗi xuất hiện - nó như thể xác thực không thành công.
thông tin bổ sung:
1) thuộc tính Text của textbox được ràng buộc với một dataview trong đó sử dụng một DataTable như nguồn của nó. Trường bị ràng buộc là trường datetime không có giá trị không có ràng buộc hoặc mặc định.
2) Sự kiện xác thực cháy và thuộc tính CancelEventArgs không được đặt thành Hủy. Các sự kiện Validated, LostFocus và Leave đều bị cháy, đi LostFocus> Leave> Validating
3) Tôi không thể thấy bất kỳ thay đổi mã nào liên quan đến kiểm soát hoặc nguồn dữ liệu với một vài ngoại lệ. Thứ nhất là điều này:
Me.txtRangeEnd.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.dvClientNos, "RangeEnd"))
hiện đã thay đổi như thế này:
Me.txtRangeEnd.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.dvClientNos, "RangeEnd", True))
Thứ hai là điều này:
Me.dcolRangeEnd.DataType = GetType(System.DateTime)
hiện đã thay đổi như thế này:
Me.dcolRangeEnd.DataType = GetType(Date)
Ngoài ra còn có điều này, đã có trong đang kể từ ngày đầu tiên:
AddHandler txtRangeEnd.DataBindings("Text").Format, AddressOf FormatBoxToDate
Private Sub FormatBoxToDate(ByVal sender As Object, ByVal e As ConvertEventArgs)
Try
If Not e.Value Is DBNull.Value Then
e.Value = Format(e.Value, "d")
End If
End Try
End Sub
Bây giờ, nếu tôi loại bỏ các "True" từ thêm các liên kết dữ liệu sau đó tôi có thể thoát khỏi sự kiểm soát với một giá trị trống, nhưng sau đó nó lại trở về giá trị ban đầu. Việc xóa định dạng ngày xuất hiện để không tạo ra sự khác biệt về điều này (nó chỉ hoàn nguyên để hiển thị ngày 06/01/2011 00:00:00 thay vì ngày 06/01/2010 mong muốn). Không có mã nào khác đề cập đến hộp văn bản đó. Tôi đang nghĩ một cái gì đó phải có thay đổi trong xác nhận điều khiển databound giữa VS2003 và VS2008, nhưng nó chỉ là khả năng tôi thiếu một cái gì đó tâm-numbingly rõ ràng.
Bất kỳ ý tưởng nào?
Phương thức FormatBoxToDate nhỏ đó thực sự được tạo vì .NET 2003 không có cách nào khác để thực hiện. Thuộc tính giá trị null bây giờ có thể truy cập thông qua menu Databindings nâng cao - tuy nhiên, cố gắng thiết lập nó thành một chuỗi rỗng bằng cách sử dụng IDE thực sự đặt giá trị thành Nothing (Không có gì trong mã) ... điều này không tạo ra sự khác biệt nào. – MartW
Tôi đã tự tay hack nó vào String.Empty (không bao giờ thích đặt "") và nó bây giờ hoạt động. Tôi gọi đó là tiền thưởng kiếm được: D – MartW
Rất cũ, nhưng rất hữu ích vì nó vẫn được áp dụng trong VS2013! nhưng câu hỏi phụ: dòng để thay đổi làm việc tuyệt vời cho tôi .. nhưng tôi có mọi thứ khác được duy trì trong các thuộc tính thiết kế .. nếu tôi hiểu nó đúng, đó là một vấn đề thêm giá trị null trong sau theo thuộc tính hộp văn bản -> (Data Bindings) -> (Advanced) -> chọn thuộc tính text, chọn định dạng ngày tháng (trong trường hợp của tôi), sau đó điền vào giá trị null. Tuy nhiên, một chuỗi rỗng dường như không hoạt động ở đó. bất kỳ lời khuyên nào về cách làm điều đó trong nhà thiết kế? –