我需要让基类强制执行:
public class DialogForm : Form
{
public DialogForm()
{
base.HelpButton = true;//enforce this
base.MinimizeBox = false;//enforce this
base.MaximizeBox = false;//enforce this
}
}
AND 请确保之后没有修改,怎么办呢?
我无法覆盖MinimizeBox
和MaximizeBox
属性,因为它们不是虚拟的,如果有人DialogForm
转换为Form
将绕过以下代码:
new public bool MinimizeBox
{
get { return false; }
set { base.MinimizeBox = false; }
}
new public bool MaximizeBox
{
get { return false; }
set { base.MaximizeBox = false; }
}
由于
此处参考如何解决它(感谢SLacks)
private bool m_inOnStyleChanged = false;
protected override void OnStyleChanged(EventArgs e)
{
if (!m_inOnStyleChanged)
{
m_inOnStyleChanged = true;
base.OnStyleChanged(e);
base.HelpButton = true;
base.MinimizeBox = false;
base.MaximizeBox = false;
m_inOnStyleChanged = false;
}
}
答案 0 :(得分:1)
您可以覆盖OnStyleChanged
并将属性设置为false
属性设置者(间接)调用此方法
请注意,在未来的版本中不一定如此(尽管可能会这样)
您还应该添加
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisiblity(DesignerSerializationVisiblity.Hidden)]
然而,仅隐藏属性并没有错
您(可能)不应该害怕有人会将您的实例转换为Form
并设置它们
你的客户真的是敌对的吗?
答案 1 :(得分:0)
如果您想控制表单是否包含这些按钮,可以使用多种选项。
使用new
关键字隐藏属性,以便查看和使用您的版本(他们仍然可以通过转换为Form
来使用旧版本。)
创建一个包装Form
实例的新类,让人们从中派生出来。这需要额外的努力来公开您希望它们能够使用的所有事件和调用,但它可以让您完全控制表格可以做什么和不可以做什么。
侦听OnStyleChanged事件并确保这些属性不会更改。这依赖于未记录的implmentation细节,因此未来的.NET框架可能不会以这种方式运行。
允许按钮出现,但尝试控制它们对表单的影响。您可能无法控制派生是显示还是隐藏这些按钮,但您可以控制它们对表单的影响。但是,这有点凌乱。您可以通过覆盖一些较低级别的方法(例如SetBoundsCore
)来实现此目的。您还应该查看MaximizedBounds
属性和关联的处理程序OnMaximizedBoundsChanged
。在最小化Resize
事件的结果时,您也应该能够控制它。