2015-01-05 14 views
6

複数のボタンに対して1つのプロシージャを使用する方法を探しています。質問1ではボタン1を押す必要があるが、36個のボタンのコード全体をコピーして貼り付け、36個のボタンの変数を変更するようなクイズは、誰にとっても楽しいものではありません。パスカルの複数のボタンに対して1つの手順を使用する方法はありますか?

だから私はこのようなものは可能だろうと思った:

procedure TForm1.Button[x]Click(Sender: TObject); 
begin 
    DoTask[x]; 
end; 

Xは可変であること。

同じことが可能か、同じ結果を得るための他の方法はありますか?

+0

TButtonは(送信側)から "X" を取得する代わりに、.nameの?番号を逆方向にスキャンするだけです。 –

答えて

6

これを行う最も簡単な方法は次のとおりです。

  1. ナンバー簡単にそれらを区別するために、オブジェクトインスペクタ(またはそれらが作成されているコード内)でTagプロパティを使用してボタン。

  2. 1つのイベントハンドラを作成し、同じコードで処理するすべてのボタンに割り当てます(このボタンをクリックすると、プロシージャ/関数に渡す値が割り当てられます)。

  3. イベントが受け取るパラメータは、クリックされたボタンで、TButtonとしてキャストできます。

    procedure TForm1.ButtonsClick(Sender: TObject); 
    var 
        TheButton: TButton; 
    begin 
        TheButton := Sender as TButton; 
        DoTask(TheButton.Tag); 
    end; 
    
+0

さて、助けてくれてありがとう。しかし、私はかなりパスカルの経験がないとかなりです...もしあなたがとても親切であれば、ステップ2で詳述できますか?イベントハンドラを使う方法はわからないのですが、基本的なものであっても最初から作成することはできません。 – Pascalerino

+0

IDEのいずれかのボタンをダブルクリックすると、ルーチンのシェルが作成されます(たとえば、 'Button1Click')。オブジェクトインスペクタのそのボタンの[イベント]タブを使用して、より一般的な名前に変更します( 'ButtonsClick'など)。 Ctrlキーを押しながら同じイベントを共有するフォーム上のすべてのボタンをクリックし、オブジェクトインスペクタの[イベント]タブに切り替え、すべてのボタンのOnClickハンドラとして一般的な 'ButtonsClick'イベントを選択します。 (または単にObject Inspectorを使用して各オブジェクトに個別に割り当ててください) –

+0

それははるかに明確になります。しかしもう少し簡単な質問は、どのように変数にTbutton.tagを割り当てることができるかということです。 QuestionNumber:= TButton.Tag;明らかな理由のために動作しません – Pascalerino

関連する問題