2013-09-10 71 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