编辑框上的文本更改

时间:2012-11-18 17:01:07

标签: delphi delphi-xe2

我使用编辑框作为圆形计数器。我想在text = 5或10时显示此消息然后它会执行一些功能。但是即使当轮次为5或10时,我也从未收到此消息,ERoundChange是ERound的OnChange事件(编辑框);知道为什么它不工作?我假设我使用自我错误?

{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);

2 个答案:

答案 0 :(得分:3)

由于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本身与编辑控件无关 - 当然,它被分配给此控件的事件,但当然您也可以将其分配给其他控件,并在任何控件中使用它其他你喜欢的方式。因此,它本身只与TBaseGameForm相关联,所以实际上,Self无法在逻辑上引用任何其他内容。]

答案 1 :(得分:3)

该方法是表单的实例方法,因此Self.Text引用表单的文本或标题。你需要使用

(Sender as TEdit).Text

代替。

尽管为了避免重复,您应该使用局部变量来保存编辑控件引用:

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