【问题标题】:Inherit properties into custom control C#将属性继承到自定义控件 C#
【发布时间】:2013-03-28 01:04:50
【问题描述】:

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

问题:

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

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

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

我希望像 CustomControl1.Lable1.Text 这样的东西,或者这不可能

如果我使用这个 公共标签 lbMovieName { 得到 { 返回 this.lbMoveName; } 设置 { lbMovieName = 值; } }

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

【问题讨论】:

  • 你试过this.Label1.Text吗?
  • 您可以使用公共只读属性公开内部控件。尽管最好只公开对您的自定义控件有意义的内部控件的属性。
  • @tijizor 我相信 OP 正在谈论从自定义控件外部获取 Lable1.Text。
  • Juharr 是的,这正是我想要的,但它不仅仅是标签的文本属性,它还有我添加的任何控件的所有属性

标签: c# asp.net ascx asp.net-customcontrol


【解决方案1】:

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

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

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

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

【讨论】:

  • D Stanley 我不确定您的意思是关于客户端能够更改显示属性,当然如果他们想要显示不同的东西,他们应该能够......应该'他们
  • @我的意思是客户端(使用控件的页面)可以更改控件的任何属性,而不仅仅是文本 - ID、字体、颜色、大小,位置,CSS 类,甚至可能添加事件处理程序(我从未尝试过知道)。对于标签可能没什么大不了的,但对于按钮和输入控件,它可能会暴露您没有想到的风险。如果您想要公开控件的所有属性,这很好,但封装主要属性(文本通常是大属性)是一种更安全、更常见的做法。
  • 请原谅我的无知,但首先要如何做到这一点?第二点添加添加事件处理程序需要在后面的代码中进行操作。并且深入了解其工作的系统吗?
  • "如何做到这一点" - CustomControl1.Label1.CssClass = "MyCssClass"; CustomControl1.TextBox1.OnTextChanged += this.SendEmailToAfghanistan; 我不知道添加这样的事件处理程序是否可以在 ASP.NET 中工作,但关键是不要再暴露你必须。让它看起来就像是一个带有自定义属性的控件。
  • 啊哈,现在制作场景......如果像你所说的那样知道这在.Net中是否可能会很有趣。仍然如何将其引入系统?你需要一些特殊的工具来注入它吗???
【解决方案2】:

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

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

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

【讨论】:

  • Floremin 这就是我想避免的我看不出重新发明轮子的意义!
  • 这不是重新发明轮子。这是 OO 编程:您公开需要公开的内容并隐藏不需要公开的内容。除此之外,您可以将自定义控件的 Label1 属性设为公开,您将能够访问其所有属性。
  • 好的,我理解这一点,但是......如果我只使用一个文本框,它也以完全相同的方式公开其所有属性。我的意思是不在自定义控件中的文本框
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多