我想知道一个按钮是否可以有两个功能。 例如,我有stringgrid,其中有订单,并且我想要总结所有订单的按钮,并且当订单没有总结时,我想要回到之前的状态。
if Sender = reduceOrderBTN then
begin
J:=1;
reduceOrderBTN.Caption:= 'Show all';
qryReduceOrders.Close;
qryReduceOrders.Open;
end;
advOrderGrid.RowCount:= qryReduceOrders.RecordCount + 1;
while NOT qryReduceOrders.Eof do
begin
advOrderGrid.Cells[0, qryReduceOrders.RecNo] := IntToStr(qryReduceOrders.RecNo);
advOrderGrid.Cells[1, qryReduceOrders.RecNo] := qryReduceOrdersProductName.AsString;
advOrderGrid.Cells[2, qryReduceOrders.RecNo] := qryReduceOrdersSpecialWish.AsString;
advOrderGrid.Cells[3, qryReduceOrders.RecNo] := qryReduceOrdersQuantity.AsString;
advOrderGrid.Cells[4, qryReduceOrders.RecNo] := qryReduceOrdersprepTime.AsString;
advOrderGrid.Repaint;
qryReduceOrders.next;
end;
if (Sender = reduceOrderBTN) and (J = 1) then
formShow(nil);
//trying to get back to old state but this doesnt work
end;
答案 0 :(得分:5)
最可读的方法是创建两个这样的TNotifyEvent
程序。
procedure TMyForm.OnClickNormal(Sender: TObject);
begin
DoNormalAction;
MyButton.Caption := 'Reverse Action';
MyButton.OnClick := OnClickReverse;
end;
procedure TMyForm.OnClickReverse(Sender: TObject);
begin
DoReverseAction;
MyButton.Caption := 'Normal Action';
MyButton.OnClick := OnClickNormal;
end;
然后在设计编辑器中设置默认操作和标题。
答案 1 :(得分:1)
您可以简单地使用按钮的Tag属性来跟踪状态。
If reduceOrderBTN.tag = 0 then begin
// Sum orders code here
reduceOrderBTN.tag := 1;
end
else begin
// Set Previous state code here
reduceOrderBTN.tag := 0;
end;