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