Đ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.
Nguồn
2013-07-01 02:42:21
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? –
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
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