我正在设置一个新过程,它将在执行查询后显示一条消息。我使用的是"AfterOpen“事件,其中必须传递"DataSet: TDataSet”参数。
procedure Tf_SeznamDluzniku.ShowInfoMessage(DataSet: TDataSet; info : string);
begin
l_InfoMessage.Caption := info;
img_success.Visible := True;
end;query.AfterOpen := ShowInfoMessage(,'InfoMessage here')请有人解释一下,DataSet变量是什么,作为第一个参数,我必须传递给过程什么?
发布于 2019-07-24 12:33:23
如果它附加到事件,则触发AfterOpen事件的是dataset。dataset本身将调用该过程,并在该参数中传递自己。
但是您添加了Info参数,这使得过程作为事件处理程序无效。你想要这些信息从哪里来?从数据集中?
因为它是一个事件处理程序,所以自己称它为事件处理程序是错误的。您可以这样做,只需传递nil (或特定的数据集),因为它无论如何都不被使用。但是您可能会陷入奇怪的情况,因为看起来这个方法只在打开之后才会被调用,但是后来发现它也会在其他情况下被调用。因此,最好创建一个单独的过程来执行您想做的事情,并从AfterOpen事件处理程序中调用它。您可以从数据集传递信息,但也可以从其他地方调用该过程,例如,在数据集打开之前提供一些初始标题:
// The procedure doesn't need the dataset, only the info to set.
procedure Tf_SeznamDluzniku.ShowInfoMessage(Info : string);
begin
l_InfoMessage.Caption := info;
end;
// The actual event handler for YourDataset.OnAfterOpen (you have to attach them)
// This can set the info, and/or maybe set the success indicator right away..
procedure Tf_SeznamDluzniku.YourDataSetAfterOpen(DataSet: TDataSet);
begin
ShowInfoMessage(DataSet.FieldByName('info').AsString);
img_success.Visible := True;
end;
// For demonstration, another event handler for showing the form, to put in some initial caption.
procedure Tf_SeznamDluzniku.FormShow(const Sender: TObject);
begin
ShowInfoMessage('Loading...');
end;https://stackoverflow.com/questions/57182644
复制相似问题