窗体继承,在那个事件中判断权限
base1_Form是基础窗体,a1_Form,a2_Form.......an_Form等几十个窗体都是从base1_Form继承来的,现在权限也得到了,在base1_Form的哪个事件中判断权限比较好?
1、不想在窗体的外面判断,因为有几十个窗体,一个一个判断太麻烦了。
2、base1_Form的OnCreate()事件中也不能判断,因为窗体还没有产生。
应该在哪个事件中判断呢?
[解决办法]
onshow事件
[解决办法]
就象你说的不能在OnCreate里面判断是一个意思,你在OnShow里面Close,这个时候窗体还没有Show,你Close是不会把窗体关掉的.
[解决办法]
你說的方式“在構造中拋異常”可以實現,但C++不建議構造函數拋出異常。而且你在構造函數中拋出異常,那麼你必須檢查你的代碼,在異常之前不能有任何的 new 或使用其他資源,因為構造函數中拋出異常是不會執行析構函數的。
重載 AfterConstruction 函數,應該也可以實現。
將權限獨立出來,形成一個類。而不是將權限放在窗口 Form 中。這樣你什麼時候識別權限都可以。如果無權限瀏覽,那麼就不應該進行構造,而不是構造後再CLOSE,或在構造中拋異常。
以下為廢話,僅說明"多使用組合,少用繼承"。為什麼在窗口外部判断好。
Class TFormAuthority
{
public :
bool CheckCanBrowse()
{
if(!FCanBrowse)
ShowMessage("can not browse");
return FCanBrowse;
}
...
};
class TForm1 : public TForm
{ ....
public :
TFormAuthority *FormAuthority ; //指向所屬權限
}
1、多使用組合,少用繼承。讓權限配置更加靈活。不知道你是否碰到同一個Form類, 用不同的外部配置,就有不同的權限的例子。例如:1、一個員工總管,可以配置為只查看某部門的人員,其他部門看不到,部門權限也對應分配。2、庫存操作,不同的人員只允許操作不同的物料種類。3、薪資系統,不同的人員只能看到(或操作)不同的薪資內容。
在這種情況下,可操作內容一般使用外部配置(配置方式放在外部文件或SQL中),對應權限的配置就會較為復雜。一般也有多種實現方式,但將權限獨立出來,你將會多幾個選擇。如果權限鎖死在 Form 類中,那麼選擇就很有限,只有繼承方式或者"權限不易擴展及不能集中管理"。
2、多使用組合,少用繼承。避免多余的構造。將權限與類實現用組合方式隔離。類構造前檢查權限,類構造時,再將對應權限“注入/拉到”到類中。然後再根據配置文件及權限來配置 Form 界面。
3、多使用組合,少用繼承。讓類的內聚性更好,每個類專注於實現自己的功能而不用多考慮其他功能,這有利於開發速度及功能擴展。
。。。。。。
[解决办法]
哈哈,如果按照C++的建议的话,让一切东西都成为对象,根本就不用担心析构的问题啦:)
对于授权问题,正常情况下是不会有问题的,当有问题时,我们就可以认为这是异常啦:)