2010-09-01 40 views
12

C#, VS2010, ứng dụng WinForm:VS 2010 - Lỗi khi mở Điều khiển/Biểu mẫu Người dùng với Nhà thiết kế

Đôi khi tôi gặp sự cố khi tôi mở một số điều khiển/biểu mẫu của mình. Tất cả các biên dịch mã và ứng dụng chạy đúng cách. Mở điều khiển trong nhà thiết kế mang lại cho tôi:

Trình tải thiết kế không cung cấp thành phần gốc nhưng chưa nêu rõ lý do.

Từ kinh nghiệm của tôi, tôi có thể nói, thường là điều gì đó trong mã của tôi không được khởi tạo đúng cách, ví dụ: một tài sản không được thiết lập mà bằng cách nào đó có sẵn trong thời gian chạy, nhưng không phải khi mở với nhà thiết kế. Vấn đề duy nhất là, nguyên nhân gốc rễ là khó tìm.

Hỏi: Có cơ hội bằng cách nào đó sử dụng trình gỡ rối khi trình thiết kế mở thành phần của tôi trong Visual Studio 2010 không? Điều đó sẽ giúp ích rất nhiều và vấn đề giải quyết là rất có thể chỉ là vài phút sau đó.

Lưu ý: Chỉ cần làm điều này rõ ràng, tôi biết cách sử dụng trình gỡ lỗi ;-), tôi chỉ không biết làm thế nào tôi có thể nói cho nhà thiết kế của VS2010 mở điều khiển của tôi trong chế độ Gỡ lỗi.

Kể từ ngày 2 SEP 2010 thêm:

Cảm ơn sự giúp đỡ của bạn. Về cơ bản nó là bài viết của Thư viện MSDN mô tả cách thực hiện nó.

  • Tôi đã quản lý để thiết lập và chạy phiên bản thứ hai (không có nhiều điều để hiểu cách thực hiện).
  • Nó chỉ thất bại trong trường hợp của tôi, vì trường hợp VS2010 thứ hai (gỡ lỗi Thiết kế thời gian) không tìm thấy các biểu tượng cho điều khiển tùy chỉnh của tôi. Tôi đã thêm các biểu tượng theo cách thủ công trong Gỡ lỗi/biểu tượng. Không kết quả, vẫn "Breakpoint sẽ không được nhấn vì thiếu biểu tượng"

BTW, sử dụng phương pháp này nó là hữu ích để loại trừ một số nội dung từ các biểu tượng tải (qua cửa sổ module), bởi vì điều này sẽ an toàn một nhiều thời gian.

Bây giờ nếu phải tìm ra cách để có được những biểu tượng được giải quyết và sau đó tôi có thể giải quyết vấn đề này .....

+0

Gỡ lỗi thời gian thiết kế với phiên bản thứ 2 của công trình VS2010, tôi vẫn gặp sự cố với các ký hiệu cho các tệp dll của tôi. Tôi đã đăng bài này ở đây (http://stackoverflow.com/questions/3687840/vs2010-loading-symbols-to-debug-at-design-time-breakpoint-will-not-be-hit) và sẽ đăng giải pháp cũng ở đây một khi tôi biết điều đó. –

Trả lời

13

Phần lớn các vấn đề về thời gian thiết kế với điều khiển tùy chỉnh là do mã trong trình xử lý sự kiện hoặc phương thức ghi đè trong điều khiển của bạn chạy vào thời gian thiết kế cũng như thời gian chạy. Đó là điều bình thường, bạn sẽ nhận được phản hồi ngay lập tức khi bạn thay đổi một thuộc tính trong cửa sổ Properties chẳng hạn.

Nhưng không mong muốn khi mã phụ thuộc vào thứ gì đó có sẵn trong thời gian chạy nhưng không phụ thuộc vào thời gian thiết kế. Giống như kết nối dbase hoặc tệp được lưu trữ trong thư mục xây dựng. Điều đó có thể tạo ra ngoại lệ và Visual Studio không phải là rất mạnh mẽ chống lại xử lý ngoại lệ tại thời điểm thiết kế. Trường hợp xấu nhất, bạn có thể gặp sự cố với máy tính để bàn mà không cần chẩn đoán. Nhưng bất cứ điều gì là có thể.

Xem lại các mã trong kiểm soát của bạn và chắc chắn rằng các bit mã mà nên chỉ chạy trong thời gian chạy được gói như thế này:

if (!DesignMode) { 
    // etc.. 
} 

trường hợp cứng có thể được chẩn đoán với các mẹo gỡ lỗi trong MSDN Library article này .

+0

Cảm ơn phản hồi của Hans. Đầu tiên tôi phải tìm nguyên nhân gốc rễ trước khi tôi có thể tận dụng điều kiện "DesignMode". Tuy nhiên, bài viết MSDN mô tả cách thực hiện, chỉ cần tìm ra vấn đề biểu tượng (như được mô tả trong bài đăng gốc) –

+0

Tôi chắc chắn * sẽ làm điều này theo cách khác. –

+0

Giải quyết hầu hết các trường hợp, một số trường hợp còn lại. –

12

Để gỡ lỗi kiểm soát của bạn trong chế độ thiết kế, bạn cần hai trường hợp của Visual Studio. Trong trường hợp đầu tiên, mở dự án có chứa mã nguồn điều khiển này. Trong thuộc tính Project, Debugger, thiết lập dòng lệnh gọi một cá thể Visual Studio khác (msdev? Không biết chính xác cho VS2010 - lấy nó từ shortcut), Sau đó thực thi lệnh "Start Debugging". Một phiên bản Visual Studio khác bắt đầu. Trong trường hợp này, hãy mở dự án khách hàng sử dụng điều khiển của bạn trên biểu mẫu.

+0

Cảm ơn Alex, đây là phương pháp phù hợp. Bài viết MSDN tại câu trả lời của Hans mô tả cách chính xác để làm điều đó. Nhưng câu trả lời của bạn cũng đúng. Lưu ý: Danh tiếng của tôi ở đây chưa đủ cao để bỏ phiếu cho câu trả lời của bạn. –

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