2015-02-05 69 views
1

我有一組數據庫複選框,並在末尾有一個「以上都不是」框。我想要做的是,如果點擊「以上都不是」,則清除其餘部分。如果它已被選中,並且任何其他人被點擊,則清除「以上都不是」框。Delphi如何在TDBCheckBoxes之間建立一種獨佔關係

procedure TformLOC30v15.chkC0900AClick(Sender: TObject); 

begin 
if chkC0900Z.Checked = True then 
begin 

    if not(tblMNLOC30.State in [dsEdit, dsInsert]) then 
     tblMNLOC30.Edit; 
    tblmnloc30.FieldByName('C0900Z').AsString := ''; 
    tblmnloc30.Post; 
    tblMNLOC30.Edit; 
end; 
end; 

procedure TformLOC30v15.chkC0900ZClick(Sender: TObject); 
begin 
if chkC0900Z.Checked = True then 
begin 
    if not(tblMNLOC30.State in [dsEdit, dsInsert]) then 
     tblMNLOC30.Edit; 
    tblmnloc30.FieldByName('C0900A').AsString := ''; 
    tblmnloc30.FieldByName('C0900B').AsString := ''; 
    tblmnloc30.FieldByName('C0900C').AsString := ''; 
    tblmnloc30.FieldByName('C0900D').AsString := ''; 
    tblmnloc30.FieldByName('c0900Z').AsString := 'True'; 
    tblmnloc30.Post; 
    tblMNLOC30.Edit; 
end; 
end; 

這適用於大多數情況,但是當選擇「以上都不是」,並點擊任何其他箱子,箱子被清除,但被點擊的框不會,除非點擊選擇它再次。有人知道爲什麼會發生這種情況嗎?謝謝。

+0

你爲什麼要發佈你更新的數據?這當然會在數據保存時造成不一致? – 2015-02-06 09:27:08

回答

0

好的......我想通了。如果有人感興趣,這裏是結束代碼。

procedure TformLOC30v15.chkC0900AClick(Sender: TObject); 

begin 
(Sender as TDBCheckBox).OnClick := nil; 
chkC0900Z.OnClick := nil; 
if chkC0900Z.Checked = True then 
begin 
    if not(tblMNLOC30.State in [dsEdit, dsInsert]) then 
     tblMNLOC30.Edit; 
    tblmnloc30.FieldByName('C0900Z').AsString := ''; 
    tblmnloc30.FieldByName((Sender as TDBCheckBox).DataField).AsString := 'True'; 
    tblmnloc30.Post; 
    tblMNLOC30.Edit; 
end; 
    (Sender as TDBCheckBox).OnClick := chkC0900AClick; 
    chkC0900Z.OnClick := chkC0900ZClick; 
end; 

procedure TformLOC30v15.chkC0900ZClick(Sender: TObject); 
begin 
chkC0900A.OnClick :=nil; 
chkC0900b.OnClick :=nil; 
chkC0900c.OnClick :=nil; 
chkC0900d.OnClick :=nil; 
chkC0900z.OnClick := nil; 
if chkC0900Z.Checked = True then 
begin 
    if not(tblMNLOC30.State in [dsEdit, dsInsert]) then 
     tblMNLOC30.Edit; 
    tblmnloc30.FieldByName('C0900A').AsString := ''; 
    tblmnloc30.FieldByName('C0900B').AsString := ''; 
    tblmnloc30.FieldByName('C0900C').AsString := ''; 
    tblmnloc30.FieldByName('C0900D').AsString := ''; 
    tblmnloc30.FieldByName('c0900Z').AsString := 'True'; 
    tblmnloc30.Post; 
    tblMNLOC30.Edit; 
end; 
chkC0900Z.OnClick := chkC0900ZClick; 
chkC0900A.OnClick := chkC0900AClick; 
chkC0900b.OnClick := chkC0900AClick; 
chkC0900c.OnClick := chkC0900AClick; 
chkC0900d.OnClick := chkC0900AClick; 
end; 
+0

在我看來,如果清除「OnClick」處理程序解決了您的問題,那麼您在別處有代碼來響應數據更改而觸發這些事件?如果是這樣的話,那麼你所做的全部就是用更多的膏藥來修補漏水的設計。 (請參閱我對上述問題的評論。) – 2015-02-06 09:26:26

+0

實際上發生的事情都是遞歸調用自己。沒有別的東西叫做處理程序。 – 2015-02-06 14:48:03

相關問題