我正在使用一个编辑框作为圆形计数器。我希望当文本= 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);
最佳答案
由于ERoundChange
是TBaseGameForm
的方法,因此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/