2011-10-16 24 views
9

Tôi có một UserControl với một tài sản công cộng sử dụng các thuộc tính sau:Làm nhà thiết kế Visual Studio bỏ qua một tài sản công cộng

[Browsable(false)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

Tôi đã cố gắng xóa các hình thức sở hữu, tái tạo một hình thức mới mẻ trong Visual Studio 2010 và thêm UserControl này vào biểu mẫu. Nó tiếp tục thêm một dòng như sau trong tập tin thiết kế:

this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty"))); 

Điều này làm hỏng ứng dụng của tôi vì thuộc tính này không được thiết kế để tạo ra theo tuần tự.

Trả lời

1

Tôi thất bại trong việc tìm ra một giải pháp thực tế, nhưng một workaround thay vì ...

tôi phải đi vào file Form.resx và xác định vị trí các dữ liệu/giá trị cặp khóa mà nó đã được deserializing vào tài sản công cộng của tôi. Tôi đã xóa nội dung cặp XML theo cách thủ công và sau đó tôi có thể chạy ứng dụng.

Điều này cho phép ứng dụng của tôi tạo và chạy mà không có lỗi. Mọi thứ khác tôi đã thử (bao gồm xóa biểu mẫu vùng chứa cho UserControl của tôi và tạo lại nó liên tục) đã không hoạt động.

5

Sử dụng [DesignerSerializationVisibilityAttribute (Visibility = Hidden)]

MSDN Article

+1

Xin lỗi, tôi không thấy rằng bạn đã sử dụng ... –

2

Hãy thử sử dụng một lĩnh vực tư nhân với các phương pháp accessor của tài sản cùng với [field: NonSerialized] thuộc tính:

[field: NonSerialized] 
private MyType _MyProperty; 

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public MyType MyProperty 
{ 
    get 
    { 
     return _MyProperty; 
    } 
    set 
    { 
     _MyProperty = value; 
    } 
} 
11

Làm tài sản chỉ đọc lúc thiết kế sẽ ngăn chặn nó được đăng vào file resx. Kỳ lạ nếu MyType xảy ra là một bộ sưu tập chỉ đọc được bỏ qua bởi các nhà thiết kế và bạn vẫn có thể thiết lập các tài sản tại thời gian thiết kế mặc dù tài sản không được viết ra vào resx vì vậy tốt nhất để làm cho tài sản không thể duyệt quá.

[ReadOnly(true)] 
[Browsable(false)] 
public MyType MyProperty 
{ 
    get { return _MyProperty; } 
    set { _MyProperty = value; } 
} 
+1

Tôi muốn chia sẻ rằng một đồng nghiệp đã đề xuất giải pháp này khi xem nhà thiết kế WinForm khiến Visual Studio gặp sự cố. Đặt tất cả các thuộc tính công khai tùy chỉnh với các thuộc tính này sẽ ngăn nhà thiết kế gây ra sự cố VS. – TheLegendaryCopyCoder

+0

Tôi muốn thuộc tính này tồn tại trong khung nhỏ gọn. :( – reirab

+0

Tôi đã phải sử dụng tên đủ điều kiện: trong VS 2013 (VB) – Azura

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