• ベストアンサー

Delphi 多数のコントロールの名前変更

下記コードをfor nextで簡単にするにはどうしたらよいでしょうか? data :array[1..30] of string; CheckBox1.Caption:=data[1]; CheckBox2.Caption:=data[2]; CheckBox3.Caption:=data[3]; ~~~ CheckBox30.Caption:=data[30];

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CheckBox の Tag プロパティにそれぞれ 1 から 30 までセットしておいて、 for i := 0 to ControlCount - 1 do if Controls[i] = TCheckBox then TCheckBox(Controls[i]).Caption := data[TCheckBox(Controls[i]).Tag]; などとすればできると思います。(上の例はフォーム上に30個のCheckBoxしか無い前提です。詳細はヘルプをみてください)

situmonnsya
質問者

補足

ありがとうございます。 if Controls[i] = TCheckBox thenで「互換性の無い型です」とエラーになります。 これの頭に「//」入れてREM文にしたら、うまくいきましたが。

その他の回答 (1)

回答No.2

#1 補足の回答です。 = ではなく、is の間違いでした。 フォーム上に他のコントロールがある場合はチェックが必要となります。

situmonnsya
質問者

お礼

他のコントロールにも反映されて困ってました。 ありがとうございます。

関連するQ&A

  • Delphi の文字列型stringについて

     以下のコードで string は AnsiString、Char は AnsiChar です。  buf: array[1..16] of Char; を  buf :string[16]; と宣言しては意図通りに動きません。なぜでしょう?  TPerson = record   Age : Integer;   Name: string[30];  end;  TPersonArray = array of TPerson; procedure TForm1.Nantoka; var  i,j: Integer;  buf: array[1..16] of Char; //buf :string[16]; ではダメ!  Fs : TFileStream;  R : TPersonArray; begin  SetLength(R, 100); //配列のサイズを決定  for i := 0 to 99 do //動的配列の添え字は常に0から始まる  begin   R[i].Age := Random(100);   for j := 1 to 16 do buf[j] := Chr( Random(26)+97 );   //buf :string[16]; では buf[j] が'文字'にならない!   R[i].Name := 'Stream '+buf;  end; end;

  • CheckBoxのコントロール配列について

    VB2008を使用しています。 True状態のCheckBox1~70をButtonを押すことによってFalse状態にさせようとしていますが、一つずつコードを記載するのは長くなってしまうため以前こちらに投稿されていたTextBoxのコントロール配列を参考に下記のコードを作成しました。 Dim c As Integer For c = 1 To 70 Me.Controls("CheckBox" & c.ToString).Checked = False Next しかし、このコードでは下記のエラーが出てしまいます。 "CheckedはSystem.Windows.Forms.Controlのメンバではありません。" どなたかお知恵をお貸し下さい。

  • Delphiの型変換

    わけあって、Array of charとStringを相互に変換したいのですが、方法はありますでしょうか。 stringは1文字なのですが、charとの変換がどうしても上手くいきません。 よろしくお願いします。 x : string; y : array [0..79] of char; x := 'A'; y[0] := x; みたいなコトをしたいのですが・・・。

  • オブジェクト名を変数で参照できますか

    VB初心者です。 配列の場合 Dim str(10) as string と宣言し、i番目のデータを取り出したいときには、str(i) と記述すると思います。 そこで質問ですが、例えばCommandが1~10まであるとします。 オブジェクト名はそのまま(Command1, Command2)で、それぞれのCaptionに違ったデータが入っています。 (例えば、Command1のCaptionには'A' Command2のCaptionには'B'といった感じに) ある文字列があり、For文を使い、CommandのCaptionとその文字列が一致したときに文字列を出力するという処理を行いたいとき、どのように Command1~10のCaptionを回せばいいのでしょうか? コードを記述しておきます。 Dim str(10) as String Dim i as Integer Dim j as Integer for i = 0 to 10 for j = 0 to 10 ☆☆ if Command(i).Caption = str(j) then print.str(j) end if next next ☆☆のところです。 可能であれば回答をお待ちしております。 環境は windows XP, VB6.0 です。

  • フォームオブジェクトのコントロール

    あるプログラムを解析していたところ、引数に応じて違うフォームのラベルに文字列を代入し・表示するというVB6で書かれた下のコードがありました。 これをVB2008で置き換えてみようと思ったのですが、 ***クラス 'System.Windows.Forms.Form' には既定のプロパティがないため、インデックス処理を実行できません。*** というエラーが帰ってきてしまいます。どのように書き換えればよろしいのでしょうか?? [VB6] Public Sub MsgBoxE(BType As Integer, MsgH As String, MsgM As String, MsgL As String) Dim DForm As Form Set DForm = Nothing 'ダイアログ選択 Select Case BType Case 0 Set DForm = DialogC Case 1 Set DForm = DialogB Case 2 Set DForm = DialogC End Select On Error Resume Next 'メッセージセット DForm!Label1.Caption = MsgH DForm!Label2.Caption = MsgM DForm!Label3.Caption = MsgL DForm.Show

  • VB6 動的追加コントロールの値変更

    お世話になります。VB6初心者です。 動的追加コントロールの値変更で困っています。 Form3にFrame1をコントロール配列で1つ置いています。 ループ処理でFrame1をループ分LOADし、そのフレームの上にチェックボックスを動的に追加していく処理をしています。この動的に追加したチェックボックスの値の変更ができません。 ちなみに値やキャプションの取得はできます。 どなたかご教授願います。 Private Sub Command1_Click() Dim CHKbox(4) As VB.CheckBox Dim i As Integer For i = 1 To 4 Load Form3.Frame1(i) With Form3.Frame1(i) .Top = Form3.Frame1(i - 1).Top + 450 .Visible = True .Caption = "フレーム" & i End With Set CHKbox(i) = Controls.Add("VB.Checkbox", "CHKbox" & i, Form3.Frame1(i)) With CHKbox(i) .Move 2000, 200, 1300, 180 .Visible = True .Caption = "チェック" & i End With Next MsgBox CHKbox(1).Value  `値の取得は可能ですが CHKbox(1).Value = True   `値の変更ができません End Sub

  • 配列化

    VB2005においてlabel,textboxといったコントロールを配列化したいのですがどうすればいいでしょうか? VB6では下記のコードが成り立ちますが・・・ For i=0 to 3 label(i).caption = str(i) Next このようにコントロール自体を配列化することは出来るのでしょうか?

  • 濁点のソート

    PHPで濁点のソートがうまく出来なくて困っております。 データは下記のような形で入っています。 $temp_array=array("じごい","じこあ","しこう"); sort($temp_array); var_dump($temp_array); 結果は下記のようになってしまいます。 array 0 => string 'しこう' (length=9) 1 => string 'じこあ' (length=9) 2 => string 'じごい' (length=9) 本来であれば濁点を無視した下記のようなソート順にしたいのです。 array 0 => string 'じこあ' (length=9) 1 => string 'じごい' (length=9) 2 => string 'しこう' (length=9) どうしたらいいのでしょうか。 教えてください。

    • 締切済み
    • PHP
  • insert文についてご教授ください。

    行き詰ってしまいましたので、 どなたか教えてください。 横が15件、縦が1万件程あるCSVファイルのデータを、 下記のような形で取得しました。 array(11427) { [0]=> array(16) { [0]=> string(4) "○△×…" [1]=> string(8) "○△×…" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(29) "○△×…" [5]=> string(0) "" [6]=> string(0) "" [7]=> string(1747) "○△×…" [8]=> string(4) "○△×…" [9]=> string(4) "○△×…" [10]=> string(0) "○△×…" [11]=> string(55) "○△×…" [12]=> string(55) "○△×…" [13]=> string(55) "○△×…" [14]=> string(43) "○△×…" [15]=> string(63) "○△×…" }    ・    ・    ・ ところどころ1000文字を超えるデータがあり、php.iniのmemori_limitを64Mまで増やし、配列には格納する事は出来たのですが、 上記配列を下記のような形でインサートしようとしたところ、 5000件程しかデータベースに格納されません。 for($i=0; $i<count($data) $i++) { $sql = insert into sample ( seq, id, data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12, data13, data14 ) values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ); $stmt = $db->prepare($sql); $db->execute($stmt, $data[$i]); } 5000件までしかデータが入らない等といったmysqlの制限なのかは分かりませんが、 たまに下記のようなメモリーオーバーのエラーが、PERE上で起きているような表記がでてしまいます。 Allowed memory size of XXXX bytes exhausted xxx PERE.php 何か、インサート文でのメモリ開放の関数を使う等、良い方法はないでしょうか? どなたか、ご教授をお願いいたします。

    • ベストアンサー
    • PHP
  • 配列について

    string[] array = new string[200]; というように、arrayという配列を宣言して、そこに CheckBox.Textを入れていきたいんですが、 stringを暗黙的にstring[]に変えれません。というようなエラーがでます。 やっぱり、こんなふうにテキストを配列に入れることは無理なんでしょうか?? 初心者であんまり分からなくて、文章が分かりづらいと思いますが、アドバイスお願いします(><)

専門家に質問してみよう