2

我有一个自定义控件,我在上面创建了一堆标准的 windows asp 控件。

问题:

是否可以在不重新发明轮子的情况下将父控件的属性继承到自定义控件中?

例如,我有一个带有按钮、文本框和标签的控件。

通常我可以访问该控件的属性,Lable1.Text但是当这些控件位于自定义控件中时,如何在不单独封装该控件的所有属性的情况下访问它们。

我希望有类似的东西,CustomControl1.Lable1.Text或者这不可能

如果我使用这个公共标签 lbMovieName { get { return this.lbMoveName; } 设置 { lbMovieName = 值;} }

我得到了我需要的东西,但你能告诉我为什么我不应该这样做吗?

4

3 回答 3

2

最简单的方法是通过公共只读属性公开控件:

public Label MyLabel
{
    get { return this.Label1; }
}

但是,仅封装您想要公开的值绝对是一种更清洁的解决方案,原因如下:

  1. 在这种情况下,您可以抽象出实际的控件类型而不是绑定到 a Label- 如果您公开控件,则很难将 Label 替换MyNewCoolLabel为 ,例如
  2. 您可能会公开更多您想要的内容 - 客户端可以更改标签的显示属性等。
于 2013-04-05T15:01:10.510 回答
1

如果您试图避免创建属性,则可以将控件公开(这不是健全的 OO 开发)。正如其他人已经提到的那样,您最好公开您希望通过属性共享的信息。

于 2013-04-05T15:42:26.957 回答
0

我认为最好的方法和最佳实践是创建自定义控件的属性,这些属性只公开并且完全符合您的需要。您控制范围内的所有其他内容都应保持私密。像这样的东西:

public string LabelText {
    get { return this.Label1.Text; }
    set { this.Label1.Text = value; }
}

...对于您需要公开的其余属性,依此类推。这也会在设计器中为您提供很好的智能响应。

于 2013-04-05T15:07:43.973 回答