2

TEdit数独ソルバーをプログラムしようとしていて、81個のコントロールを配列として制御したいのですが、それらの名前はEdit1Edit2ではEdit3なくEdit[1]Edit[2]です。

OnChange81 個のコントロールすべてのイベント ハンドラーを個別に入力したくありません。

どうすればこれを解決できますか?

4

4 に答える 4

6

一つ一つやる必要はありません。Shift キーを押しながらクリックするか、Ctrl キーを押しながらドラッグして四角形で選択すると、フォーム上の複数のコントロールを選択できます。

したがって、一般的に:

  • Object Inspector を使用して、1 つの Edit の OnChange ハンドラーをセットアップします。
  • 必要に応じて、オブジェクト インスペクタを使用して、より一般的な名前に変更します
  • フォーム上の他のすべての編集を選択します
  • オブジェクト インスペクターを使用して、作成したばかりのハンドラーを選択します。選択したすべての編集に割り当てられます。
于 2012-10-14T09:52:53.760 に答える
5

編集を動的に作成できます。

編集ボックスの所有者と親を必ず設定してください。

procedure TForm1.OnCreate(Sender: TObject);
var
  x, y : Integer;
begin
  for y := 1 to 9 do begin
    for x := 1 to 9 do begin
      FEdit[x,y] := TEdit.Create(self);
      FEdit[x,y].Parent := self;
      FEdit[x,y].Left :=   // function based on x
      FEdit[x,y].Top  :=   // function based on y
      FEdit[x,y].Name :=   // function based on x and y
      FEdit[x,y].Width     //  any value you like
      FEdit[x,y].Height    // any value you like
      FEdit[x,y].Tag = 10*y + x;
      FEdit[x,y].OnChange = OnHandleChange;
    end;
  end;
end;

procedure TForm1.OnHandleChange(Sender: TObject);
var
  x,y : Integer;
begin
  if not Sender is TEdit then Exit;
  y := TEdit(Sender).Tag div 10;
  x := TEdit(Sender).Tag mod 10;
  // Add check if x and y are valid  

 // You now know that FEdit[x,y] is changed and you can handle accordingly.
end;

FEdit は、フォームの 2 次元配列フィールドです。

于 2012-10-14T09:51:13.777 に答える
2

共通のOnChangeイベント ハンドラーの使用と編集ランタイムの作成に加えて、設計時に作成されたコントロールで配列を埋めることもできます。

この回答で最近説明したように、設計時に作成されたコントロールを 1 次元または 2 次元の配列に追加できます。名前でFindComponent検索するTagか、ループでプロパティで検索するか、または入力して手動で配列に追加します。 81 変数。

于 2012-10-14T23:30:25.587 に答える
2

次のようなことができます。

var
  myedit: array[1..81] of TEdit;
  i: integer;
...
begin
...
for i := 1 to 81 do begin
  myedit[i] := TEdit.Create(form1);
  with myedit[i] do begin
    width := 50;
    top := 50 + (i * 55);
    left := 50;
    text := 'mytext '+inttostr(i);
    parent := form1;
    // more properties...
    end;
  end;
...

同様のコードを使用して、必要なものを動的に作成できます。

于 2012-10-14T09:51:59.983 に答える