我制作了一个自定义控件,它基本上是一个允许输入的多行TextBox
,以及报告某些信息的一些其他控件。现在,我想允许我的控件的用户更改TextBox
中的字体,并想到以下内容:“好吧,用户不应该能够更改其他控件的字体,所以我将通过控件上的Font
属性链接它,因此最终得到以下代码:
public override Font Font {
get { return txtEntry.Font; }
set { txtEntry.Font = value; }
}
(是的,我控制的匈牙利符号......旧的VB习惯很难......)
现在,这看起来很好,除了当我构建我的项目并返回到我的表单以查看效果时,Visual Studio崩溃了。再次启动项目时可靠地崩溃...我在记事本中打开了类,并将其更改为其他名称,删除了输出文件夹并打开了Visual Studio,重建了,现在一切正常。
我的问题是:我的想法中是否存在一些不准确的设计缺陷,或者这纯粹是一个VS错误?
答案 0 :(得分:8)
Font是环境属性。这意味着,如果未设置,控件将查看父级的属性以获取其值。所以,你有一个递归函数,因为父的Font属性看着孩子的,我们走了。
顺便说一下,不要心疼;我问了一次完全相同的问题: - )Windows窗体控件使用环境属性,因此子窗口控件可以像周围环境一样显示。在此上下文中,“环境”表示默认情况下从父控件检索该属性。如果控件没有父级并且未设置该属性,则控件尝试通过Site属性确定ambient属性的值。
如果控件未定位,如果站点不支持环境属性,或者未在AmbientProperties对象上设置该属性,则控件将使用其自己的默认值。通常,环境属性表示传递给子控件的控件(例如BackColor)的特征。例如,默认情况下,按钮将具有与其父窗体相同的BackColor。