9

Khi cố gắng để mở ở chế độ thiết kế một biểu mẫu (VB.NET), trong đó tôi có một UserControl tùy chỉnh, tôi thấy thông báo từ Visual Studio:Visual Studio nhắn Nhà thiết kế

--------------------------- 
Microsoft Visual Studio 
--------------------------- 
The control MyNamespace.MyUserControl has thrown an unhandled exception 
in the designer and has been disabled. 

Exception: 
Cannot access a disposed object. 
Object name: 'SplitterPanel'. 

Stack trace: 
--------------------------- 
OK 
--------------------------- 

Và hình thức không phải là được hiển thị trong thiết kế. Phải làm gì?

+0

Tôi gặp lỗi tương tự trong C# – Zyku

Trả lời

3

Tải dự án lên bằng chế độ Gỡ lỗi và đặt điểm ngắt trên chức năng InitializeComponent() để điều khiển người dùng của bạn. Bạn có thể có một số lỗi trong đó là xử lý một đối tượng có tên SplitterPanel và sau đó cố gắng truy cập nó sau đó. Khởi tạo này được chạy khi Visual Studio đang cố gắng hiển thị điều khiển, dẫn đến lỗi mà bạn đang thấy.

+0

Cảm ơn bạn, Yaakov. Tôi đặt một breackpoint trên InitializeComponent, nhưng trong chế độ thiết kế tôi không dừng lại trên nó ... MYUserControl chính nó đang hiển thị tốt trong Designer. Nhưng nó không để lại hình thức trong phù thủy được lưu trữ để được hiển thị. – serhio

+0

Tôi có trong UserControl một SplitContainer, nhưng bất kỳ yếu tố có tên SplitterPanel ... – serhio

+0

) liên quan: http://connect.microsoft.com/VisualStudio/feedback/details/540882/the-control-control-has-thrown-an -nhập-ngoại lệ-in-the-thiết kế-và-đã-bị-vô hiệu hóa – serhio

2

Bạn phải nhìn vào nhà thiết kế biểu mẫu của bạn, để gọi phương thức Dispose theo phương thức InitializeComponent. Một cái gì đó như thế này sẽ viết:

Me.SplitterPanel.Dispose() 

Vì đối tượng cuộc gọi này phá hủy trong nhà thiết kế. Vì vậy, nó không còn tồn tại để hiển thị và tận dụng nó.

Xóa dòng này sẽ giải quyết vấn đề.

2

Tháo thuộc tính

<System.Diagnostics.DebuggerStepThrough()> _ 

Từ InitializeComponent() bên trong được thiết kế riêng. Điều này sẽ cho phép bạn bước qua nhà thiết kế. Để tìm ra chính xác nơi các ngoại lệ được ném ra, bạn cũng có thể phá vỡ khi một ngoại lệ CLR được ném bởi

menu Debug >>> Exceptions >>> kiểm tra "Common Language Runtime Exceptions" hộp "Ném"

Với hai bước này, bạn sẽ có thể phá vỡ nơi ngoại lệ được ném.

Các vấn đề liên quan