2012-10-12 33 views
7

Làm cách nào để bạn đặt thuộc tính mặc định cho các điều khiển tùy chỉnh, tức là khi chúng được kéo đầu tiên vào biểu mẫu trong Trình thiết kế?C# WinForms thuộc tính mặc định của điều khiển tùy chỉnh

Không thể tìm thấy câu trả lời tại đây hoặc thông qua Google; tất cả những gì tôi nhận được là làm thế nào để hạn chế các giá trị.

Sử dụng chiều rộng & Chiều cao làm ví dụ, nếu tôi đặt chúng trong hàm tạo, chúng sẽ được áp dụng cho điều khiển mọi lúc mà Nhà thiết kế được mở. Làm cách nào để đặt chúng thành mặc định không bao giờ được áp dụng lại sau khi người dùng thay đổi các thuộc tính?

+0

Bạn có thể đưa ra ví dụ về cách áp dụng cho thuộc tính lớp cơ sở không? –

+0

Xin lỗi - đó là '[DefaultValue (someValue)]'. Đây là một liên kết đến MSDN trên nó với ví dụ: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge

+0

Tôi nghĩ rằng thuộc tính DefaultValue là những gì bạn nhu cầu. Visual Studio IDE sẽ đặt giá trị mặc định được chỉ định trong thuộc tính trong tệp Designer. Nếu người dùng sẽ thay đổi giá trị mặc định thành một số giá trị khác, Visual Studio IDE sẽ cập nhật tệp Designer với giá trị mới. Điều này sẽ ngăn tải lại giá trị trước đó khi điều khiển sẽ được mở lại vì giá trị mặc định đã bị ghi đè. – jags

Trả lời

-1

Trong hàm tạo, đặt giá trị thuộc tính bạn muốn xuất hiện khi bạn kéo nó lên khung vẽ. Hoặc nếu chúng được xây dựng trong các thuộc tính của điều khiển cơ sở thì hãy đặt chúng trong lớp mã thiết kế.

+1

Đặt các thuộc tính trong hàm tạo sẽ khiến chúng được áp dụng mỗi khi trình thiết kế được mở, nghĩa là chúng không thể được đặt. –

-1

Phần dưới đây sẽ cho phép bạn thêm giá trị khi bạn hiển thị biểu mẫu, sau đó bạn có thể đặt nó theo ý muốn.

private int widthLength = 5; 

public int Width {  

    get { return widthLength ; } 
    set { widthLength = value; 
} 
+1

Sử dụng tính năng này, các thuộc tính mặc định sẽ không được áp dụng khi điều khiển được kéo vào biểu mẫu trong Trình thiết kế. Tôi cũng nhận được một cảnh báo trình biên dịch rằng nó ẩn thành viên được thừa hưởng; thêm 'mới' theo hướng dẫn của cảnh báo sẽ không thay đổi hành vi. –

5

Hãy thử sử dụng thuộc tính DefaultValue.

private int height; 

[DefaultValue(50)] 
public int Height 
{ 
    get 
    { 
     return height; 
    } 
    set 
    { 
     height=value; 
    } 
} 
+1

Điều này không hoạt động vì thuộc tính lớp cơ sở cho Chiều cao không bị ghi đè bởi nó. –

2

Điều gì làm việc cho tôi đối với các thuộc tính mà tôi không thể ghi đè là sử dụng toán tử new. Ví dụ: thuộc tính MultiSelect trên điều khiển ListView. Tôi muốn MultiSelect đặt mặc định là false nhưng tôi vẫn muốn có thể thay đổi nó.

Nếu tôi chỉ cần đặt nó vào false trong các nhà xây dựng, hoặc trong InitializeComponent, vấn đề (tôi nghĩ) là giá trị mặc định vẫn là true, vì vậy nếu tôi đặt giá trị cho true trong thiết kế, thông báo nhà thiết kế mà true là mặc định và do đó, không chỉ đặt thuộc tính thay vì đặt rõ ràng thuộc tính theo mặc định. Nhưng sau đó giá trị kết thúc lên là false thay vào đó, bởi vì đó là những gì được đặt trong hàm tạo.

Để khắc phục vấn đề này tôi đã sử dụng đoạn mã sau:

/// <summary>Custom ListView.</summary> 
public sealed partial class DetailsListView : ListView 
{ 
    ... 

    [DefaultValue(false)] 
    public new bool MultiSelect { 
     get { return base.MultiSelect; } 
     set { base.MultiSelect = value; } 
    } 

này cho phép điều khiển để vẫn có một chức năng MultiSelect tài sản đó mặc định là false hơn true, và bất động sản vẫn có thể được bật sự kiểm soát mới.

EDIT: Tôi gặp sự cố phải làm với việc sử dụng biểu mẫu trừu tượng. Tôi đã sử dụng các lớp biểu mẫu trừu tượng, với một triển khai cụ thể mà tôi chuyển sang khi tôi cần sử dụng nhà thiết kế. Tôi thấy rằng khi tôi chuyển lớp mà tôi đã kế thừa từ đó các thuộc tính trên điều khiển tùy chỉnh của tôi sẽ đặt lại về các giá trị mặc định cũ. Tôi dường như đã sửa chữa hành vi này bằng cách thiết lập thuộc tính mặc định của họ trong constructor của điều khiển tùy chỉnh.

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