我不知道如何解释这个,但是这里有: 我的表格带有一些带有一些组合框的网格。从这个表单我创建另一个编辑数据。编辑表单还有一些像网格一样的组合框。 这些组合框中的值可以从第三种形式编辑。 如果它们被编辑,我会向所有打开的表单发送类似消息的广播以更新组合框。
procedure HsBrodcastUpdate;
var
i: integer;
begin
for i := 1 to Screen.FormCount - 1 do
SendMessage(Screen.Forms[i].Handle, WM_FORMUPDATES, 0, 0);
end;
在每个应该执行更新的表单上,我有:
procedure FormUpdate(var aMessage: TMessage); message WM_FORMUPDATES;
这就像使用霰弹枪,当一个浅滩就足够了。 将消息发送到从
创建editform的表单应该足够了我不确定它是否会提升性能,但我想试试。
我的问题:我怎样才能使用发送到所有表单的HsBrodcastUpdate将消息发送到创建发送消息的表单的表单。
答案 0 :(得分:0)
我会用一种类方法来完成这个
Form1 = class(TForm1)
...
private
...
public
Class procedure UpdateComboBox;
...
end;
然后程序看起来像这样
class procudure TForm1.UpdateComboBox;
var
F: TForm2;//This is the target form
I: Integer;
begin
F := nil;
for i := Screen.FormCount - 1 DownTo 0 do
if (Screen.Forms[i].Name = '<The Form Name Here>') then
F := Screen.Forms[I] As TForm2;
if F <> nil then
begin
//update your form's F.comboBox here
end;
end;
答案 1 :(得分:0)
我在你的帖子中没有看到任何问题,所以这甚至可能不是你想要的。听起来像实施Observer模式可能就是你想要的。
以下是您可以查看的两篇文章,但还有更多内容。 http://tdelphihobbyist.blogspot.com/2009/10/observer-design-pattern-in-delphi-push.html http://sourcemaking.com/design_patterns/observer/delph我
答案 2 :(得分:0)
您可以通过在表单上公开事件处理程序来构建一系列事件。 研究这个例子:
{- Main Form }
Type
TFormMain = Class(TForm)
private
procedure UpdateCombo( Sender : TObject);
procedure InvokeOtherForm;
end;
TFormMain.InvokeOtherForm;
var
OtherForm : TOtherForm;
begin
OtherForm := TOtherForm.Create( Nil);
try
OtherForm.OnUpdateCombo := Self.UpdateCombo; // Link update event !
OtherForm.ShowModal;
finally
OtherForm.Free;
end;
end;
TFormMain.UpdateCombo( Sender : TObject);
begin
{- Update the combos ... }
...
end;
{- OtherForm }
Type
TOtherForm = Class(TForm)
private
FOnUpdateCombo : TNotifyEvent;
procedure InvokeThirdForm;
procedure UpdateCombo( Sender : TObject);
public
OnUpdateCombo : TNotifyEvent read FOnUpdateCombo write FOnUpdateCombo;
end;
TOtherForm.InvokeThirdForm;
var
ThirdForm : TThirdForm;
begin
ThirdForm := TThirdForm.Create( Nil);
try
ThirdForm.OnUpdateCombo := Self.UpdateCombo; // Link update event !
ThirdForm.ShowModal;
finally
ThirdForm.Free;
end;
end;
TOtherForm.UpdateCombo( Sender : TObject);
begin
{- Do some internal updates }
...
{- Pass on update information event }
if Assigned(FOnUpdateCombo) then
FOnUpdateCombo( Sender);
end;
{- ThirdForm }
Type
TThirdForm = Class(TForm)
private
FOnUpdateCombo : TNotifyEvent;
procedure UpdateCombo;
public
OnUpdateCombo : TNotifyEvent read FOnUpdateCombo write FOnUpdateCombo;
end;
TThirdForm.UpdateCombo;
begin
{- Do some internal updates }
...
{- Pass on update information event }
if Assigned(FOnUpdateCombo) then
FOnUpdateCombo( Self);
end;