2013-09-10 38 views
1

我想写一个自定义dialog.Everything是好的,但我不希望我的Dialog可调用Show()event.Anyway来阻止此?阻止显示表单事件;

+0

显示你的工作.. –

+0

我打算阻止Show(),只允许使用ShowDialog()作为特定的表单。 –

+0

你有什么理由禁止它?如果有人想模仿地展示这些表格,会导致什么样的问题? – Servy

回答

3

如果你的班级继承Form这是不可能的。 Show不是虚拟的,所以你不能覆盖它。你应该把它遮蔽下来,让它在内部抛出异常或者拨打ShowDialog(没有办法将它作为一个选项完全移除),但是任何只是将变量键入为Form的调用者仍然可以调用Show,绕过你的实现。

唯一可用的选择是你的班级不能从Form继承。你需要设计你的类型来使用组合而不是继承。在你的类型定义中有一个Form属性,并操作它,向它添加控件等等,正如你通常可以操作类型本身一样。

您需要显式创建成员,以便在外部公开任何功能,将相应调用重定向到封装表单(对于诸如ShowDialog的方法)。

+0

现在明白了。好的答案btw +1 –

+0

那么show show叫什么时候调用ShowDialog? –

+0

@TCBurakAvcı如果'Show'是虚拟*,你可以这样做*。但事实并非如此,所以你不能。正如我在答案中所说的那样,你可以将它蒙上阴影,但这并不可靠。它可以解决。 – Servy