OnClick 多个条件

OnClick multiple conditions

 procedure TForm1.Panel3Click(Sender: TObject);

 begin

  if item.caption='1' then
    begin
       form2.WebBrowser1.Navigate('link1');
       form2.Caption:='1';
       form2.Show;
    end;
  if item.caption='2' then
    begin
       form2.WebBrowser1.Navigate('link2');
       form2.Caption:='2';
       form2.Show;
    end;
 end.

我想做的是在 Onclick 事件上检查项目的标题,然后浏览一个特定的 link,这不起作用,我尝试了 switch 方法也不起作用(抱歉我的英语不好),任何关于如何让它发挥作用的建议?

"doesnt work" 对您来说究竟是什么?你需要更具体。您显示的代码没有任何问题,前提是 item 已事先声明并分配(并且 end. 实际上是 end;)。

我怀疑你想让item成为被点击的对象,是吗?如果是这样,那么您只需将此 OnClick 句柄分配给相关对象,然后相应地对 Sender 参数进行类型转换,例如:

procedure TForm1.PanelClick(Sender: TObject);
var
  item: TPanel;
begin
  item := Sender as TPanel; // or TMenuItem, or whatever you are using...
  if item.Caption = '1' then
  begin
    Form2.WebBrowser1.Navigate('link1');
    Form2.Caption := '1';
    Form2.Show;
  end
  else if item.Caption = '2' then
  begin
    Form2.WebBrowser1.Navigate('link2');
    Form2.Caption := '2';
    Form2.Show;
  end;
end;

就我个人而言,我不会使用 Caption 来做决定。我会做一些更像这样的事情:

const
  Links: array[1..2] of string = (
    'link1',
    'link2'
    // and so on...
  );

procedure TForm1.PanelClick(Sender: TObject);
var
  item: TPanel;
begin
  item := Sender as TPanel; // or whatever...
  Form2.WebBrowser1.Navigate(Links[item.Tag]);
  Form2.Caption := item.Caption;
  Form2.Show;
end;

其中 Caption='1' 的对象分配了 Tag=1Caption='2' 的对象分配了 Tag=2,依此类推。

如果您实际上只有 1 个对象,您可以根据其他条件动态更改其 Caption,那么这种方法仍然有效,只需在更新 [= 时相应地更新 Tag 18=].