2011-01-21 36 views
5

Tôi đã tạo một điều khiển người dùng có một hộp văn bản bên trong nó. Tôi đã ghi đè các văn bản tài sản của kiểm soát cơ sở như sau:Điều khiển tùy chỉnh Giá trị mặc định của thuộc tính văn bản ghi đè

[Browsable(true)] 
    [DefaultValue("")] 
    [Description("Test1"), Category("Test")] 
    public new string Text 
    { 
     get 
     { 
      return textBox1.Text; 
     } 
     set 
     { 
      textBox1.Text= value; 
     } 
    } 

Bây giờ, tôi đang gặp vấn đề này, nơi bất kỳ trường hợp i tạo của điều khiển trong một hình thức, văn bản luôn luôn có một giá trị của controlname + số (ví dụ). Tôi muốn biết tại sao điều này xảy ra và cách xóa giá trị mặc định này? Cảm ơn.

Trả lời

4

Linh cảm ban đầu là nó đang gọi ToString() trên đối tượng. Ghi đè ToString() để trả lại giá trị mong muốn của bạn.

+1

Tôi hoàn toàn quên về ToString(). Đó có lẽ là lý do tại sao tôi nhận được giá trị. Cảm ơn, Aaron. Mặc dù, việc ghi đè nó không có hiệu lực. Một điều tôi quên đề cập đến là [Browsable (true)] là thuộc tính gây ra hành vi đó. Bằng cách loại bỏ nó, mọi thứ hoạt động như mong đợi. –

3

Thuộc tính DefaultValue không đặt giá trị mặc định. Thuộc tính là để mô tả giá trị mặc định là gì. Bạn phải tự đặt giá trị mặc định và sau đó sử dụng thuộc tính để mô tả nó.

Vì vậy, trong ví dụ của bạn, textbox1.Text phải được điền bằng id điều khiển. Trên UserControl của bạn, trong OnInit hoặc bất cứ nơi nào thích hợp, bạn nên gọi

this.Text = ""; 
+1

Tôi đã thử đặt Văn bản trong nhiều sự kiện và không hoạt động, s_hewitt. Tôi có thể làm cho một hack để loại bỏ giá trị, nhưng nó là xấu xí. –

+1

Có thể bạn sẽ phải đăng thêm mã. Nó không rõ ràng với tôi như thế nào điều khiển của bạn được thiết lập và làm thế nào đó là dẫn đến vấn đề này. –

+1

Vấn đề chủ yếu là trong [Có thể duyệt (đúng)], như tôi đã đề cập trong nhận xét khác. Tạo một điều khiển với một hộp văn bản trên nó và thử mã ở trên, và bạn sẽ thấy những gì tôi có ý nghĩa. Cảm ơn rất nhiều thời gian của bạn. –

2
[DefaultValue("")] 
public override string Text 
{ 
    get { return base.Text; } 
    set 
    { 
     if (this.DesignMode && (Environment.StackTrace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent"))) 
      return; 
     base.Text = value; 
     Invalidate(); 
    } 
} 
+2

Chào mừng bạn đến với StackOverflow, mặc dù mã có thể hoạt động, nhưng đừng quên thêm giải thích. – yvesmancera

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