我正在使用一个编辑框作为圆形计数器。我希望当文本= 5或10时显示此消息,然后它会执行某些功能。但是即使回合是5或10,我也永远不会收到此消息ERoundChange是ERound(edit box)的OnChange事件;知道为什么它不起作用吗?我以为我在使用Self错误?

{Check if round is 5 or 10}
//-----------------------------------------------------
procedure TBaseGameForm.ERoundChange(Sender: TObject);
//-----------------------------------------------------
begin
 if (self.Text = '5') or (self.Text = '10') then
   begin
      showmessage('checking stats for gryph locations on round: '+self.Text);

    end;
end;


我也在每个玩家开始时改变回合

ERound.Text := inttostr(Strtoint(ERound.Text)Mod 10+1);

最佳答案

由于ERoundChangeTBaseGameForm的方法,因此Self引用TBaseGameForm的当前实例,即表单,而不是其中的编辑框。

因此,Self.Text是表单的标题,而不是编辑框中的文本。如果编辑框名为Edit1,则应执行

procedure TBaseGameForm.ERoundChange(Sender: TObject);
begin
  if (Edit1.Text = '5') or (Edit1.Text = '10') then
    ShowMessage('checking stats for gryph locations on round: '+ Edit1.Text);
end;


你也可以

procedure TBaseGameForm.ERoundChange(Sender: TObject);
begin
  if ((Sender as TEdit).Text = '5') or ((Sender as TEdit).Text = '10') then
    ShowMessage('checking stats for gryph locations on round: '+ (Sender as TEdit).Text);
end;


因为导致事件的控件存储在Sender参数中。但是由于Sender被声明为TObject,因此您需要将其强制转换为实际的TEdit

[您本来可以解决这个问题。实际上,过程TBaseGameForm.ERoundChange本身与edit控件无关—当然,它已分配给该控件的一个事件,但是您当然也可以将其分配给其他控件,并以任何其他方式使用它你喜欢。因此,就其本身而言,它仅与TBaseGameForm相关联,因此,实际上,Self在逻辑上不能引用其他任何内容。]

关于delphi - 在编辑框上更改文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13442328/

10-09 19:40