- ベストアンサー
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];
- situmonnsya
- お礼率70% (374/532)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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しか無い前提です。詳細はヘルプをみてください)
その他の回答 (1)
- みい ちび(@MICHIBI)
- ベストアンサー率26% (15/56)
#1 補足の回答です。 = ではなく、is の間違いでした。 フォーム上に他のコントロールがある場合はチェックが必要となります。
お礼
他のコントロールにも反映されて困ってました。 ありがとうございます。
関連する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のメンバではありません。" どなたかお知恵をお貸し下さい。
- ベストアンサー
- Visual Basic
- 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 です。
- ベストアンサー
- Visual Basic
- フォームオブジェクトのコントロール
あるプログラムを解析していたところ、引数に応じて違うフォームのラベルに文字列を代入し・表示するという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
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 配列化
VB2005においてlabel,textboxといったコントロールを配列化したいのですがどうすればいいでしょうか? VB6では下記のコードが成り立ちますが・・・ For i=0 to 3 label(i).caption = str(i) Next このようにコントロール自体を配列化することは出来るのでしょうか?
- ベストアンサー
- Visual Basic
- 濁点のソート
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
補足
ありがとうございます。 if Controls[i] = TCheckBox thenで「互換性の無い型です」とエラーになります。 これの頭に「//」入れてREM文にしたら、うまくいきましたが。