2

ラウンドカウンターとしてエディットボックスを使用しています。テキスト=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);
4

2 に答える 2

3

はのERoundChangeメソッドであるためTBaseGameFormSelfはの現在のインスタンス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他のものを論理的に参照することはできません。]

于 2012-11-18T17:02:53.100 に答える
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;
于 2012-11-18T17:06:32.677 に答える