procedure tfdbform_editform_md.enabledatasetevent(aenalbed: boolean);
const
cdetailbeforeeditevent: tdatasetnotifyevent = nil;
cdetailbeforedeleteevent: tdatasetnotifyevent = nil;
begin
inherited;
if aenalbed then
begin
if not assigned(cdetailbeforeeditevent) then cdetailbeforeeditevent := ondetaildatasetbeforeedit;//
if not assigned(cdetailbeforedeleteevent) then cdetailbeforedeleteevent := ondetaildatasetbeforedelete;//
detaildataset.beforeedit := cdetailbeforeeditevent;
detaildataset.beforedelete := cdetailbeforedeleteevent;
detaildataset.beforeinsert := ondetaildatasetbeforeinsert;
end else
begin
detaildataset.beforeedit := nil;
detaildataset.beforedelete := nil;
detaildataset.beforeinsert := nil;
end;
end;
上述**似乎沒有什麼問題。
但是在窗體關閉再開啟之後就出現問題了
if not assigned(cdetailbeforeeditevent) then cdetailbeforeeditevent := ondetaildatasetbeforeedit;//
if not assigned(cdetailbeforedeleteevent) then cdetailbeforedeleteevent := ondetaildatasetbeforedelete;//
注意這兩句,在第一次被賦值以後,即使窗體關閉(free),再次開啟之後,因為cdetailbeforeeditevent 是常量,還記錄了前次的位址,但前次的位址中所指的事件已經銷毀了,所以會引發錯誤。
字串常量不可修改,陣列可修改的原因
一般情況下,想要獲得字串str kuai lai xiu gai wo 中的某個字元可以通過類似陣列方式獲得,str i 但是卻不可以通過str i xx 來修改。除非切割字串或者轉換為陣列。var str beijing str 0 hahaha console.log str console.l...
可重用設計 使用符號常量和parameter
可重用設計 使用符號常量和parameter 好的設計習慣會在hdl 中避免使用 魔鬼數字 而是盡量採用符號常量。verilog hdl中,使用關鍵字localparam宣告符號常量 4位全加器的verilog hdl描述 module adder carry hard lit input wire...
可修改的雜湊
如果在乙個字串中要找是否存在長度為n的回文串 可以manachar 但是更好打的方式是直接hash 可是,這個hash需要算o len 個長度為n的字串的hash值 如果暴力,已經到了o n 2 的級別 那麼考慮一下,如何簡化。計算hash的o n 是不能省的 那麼不難想到利用前面串的結果來巧算後面...