動的配列でコントロールを追加するには?


酬恩庵  2007-03-07 17:16:18  No: 135658

フォーム上にTextコントロールを表形式に並べています。
その際の縦と横のTextコントロールの数はUpDownコントロールで
指定してから表の作成をしています。

その後、UpDownコントロールで表の縦もしくは横のサイズを
変更できるようにしたいのですが、
どのようにすればよいのでしょうか?

Textコントロールには文字を入力するため(1つのコントロールに
1文字です)それらは元の位置に残すようにしたいのです。

アドバイスをお願い致します。

開発環境:VB6(SP5), WinXP


まずは  2007-03-07 17:44:03  No: 135659

それぞれのTextプロパティの取得方法は解決しているのですか?

#「・・指定してから表の作成をしています。」
#の部分のコードの提示がのぞましいです。


酬恩庵  2007-03-07 18:49:19  No: 135660

> #「・・指定してから表の作成をしています。」
> #の部分のコードの提示がのぞましいです。

Textプロパティの取得の部分のコーディングはまだ手をつけていません。
表のサイズ変更の個所を先にやっているからです。

UpDownコントロールとTextコントロールの配置のコードは以下の通りです。

Option Explicit

Private Sub Form_Load()

    'タテ方向のますめの数
    With UpDown1
        .BuddyControl = txtTate
        .BuddyProperty = "Text"
        .SyncBuddy = True
        .Max = 12
        .Min = 3
        .Increment = 1
        .Value = 3
        .Wrap = False  'True
    End With

    'ヨコ方向のますめの数
    With UpDown2
        .BuddyControl = txtYoko
        .BuddyProperty = "Text"
        .SyncBuddy = True
        .Max = 16
        .Min = 3
        .Increment = 1
        .Value = 3
        .Wrap = False  'True
    End With

End Sub

Private Sub cmdMakeMatrix_Click()
'Text1.textの大きさは600x600です。
    
    Dim i As Integer
    Dim cntTate As Integer
    Dim cntYoko As Integer

    For cntTate = 0 To txtTate.Text - 1
        For cntYoko = 1 To txtYoko.Text
            i = (txtYoko.Text * cntTate) + cntYoko
            Call Load(Me.Text1(i))
            Me.Text1(i).Text = i
            Me.Text1(i).Top = Me.Text1(0).Top + 600 * cntTate
            Me.Text1(i).Left = Me.Text1(0).Left + 600 * (cntYoko - 1)
            Me.Text1(i).OLEDropMode = vbOLEDropManual
            Me.Text1(i).Visible = True
        Next cntYoko
    Next cntTate

End Sub


魔界の仮面弁士  2007-03-07 20:45:34  No: 135661

> 動的配列でコントロールを追加するには?
「コントロール配列」は“コレクション”であって“配列”では無いので、
動的配列という呼び方は一般的ではないかも。

> フォーム上にTextコントロールを表形式に並べています。
TextBoxコントロールのことでしょうか?

リソース面や管理面などを考えると、複数のTextBox を並べるのではなく、
ひとつの表形式のコントロールを採用した方が良いと思いますよ。

> 'Text1.textの大きさは600x600です。
「Text1 の大きさ」では?

> Call Load(Me.Text1(i))
既にロード済みの場合、これはエラーになりますので、
Load すべきか否かを事前に判定すべきかと。

> それらは元の位置に残すようにしたいのです。
ならば、インデックスを連番にするのではなく、
  i=行番号×100+列番号
のように、非連続な番号として扱ってみるとか。


酬恩庵  2007-03-08 02:37:19  No: 135662

魔界の仮面弁士様 and 皆様へ

申し訳ございません、魔界の仮面弁士様の指摘どおりで
書き込み内容に不正確な箇所が多くありました。
重ねてお詫び致します。
---
> ひとつの表形式のコントロールを採用した方が良いと思いますよ。
具体的にはDataGridなどでしょうか?
当方、この手のコントロールについては使用経験もなく、知識も
無い為、コーディングのイメージがわきません。
以下のようなことが出来るコントロールは何になりますか?
ご指摘やアドバイスが頂ければ、自分なりに詳細を調べて
みます。

・セルの大きさを任意の大きさに指定出来る。
・ドラッグにて複数のセルを選択出来る。
・選択したセルは任意の色をつけることが出来る。
・選択したセルは全体の中の「どの位置にあるセルなのか」を
  把握することが出来る。


魔界の仮面弁士  2007-03-08 04:40:45  No: 135663

> 具体的にはDataGridなどでしょうか?
DataGrid / DBGrid などのグリッド系コントロールは、
行データの繰り返しには向きますが、今回の要件には、
あまり向かないかも知れませんね。

> 以下のようなことが出来るコントロールは何になりますか?
Microsoft Spreadsheet コントロールとか、
階層フレキシブル(MSHFlexGrid)コントロール、
フレキシブル(MSFlexGrid)コントロール…とか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加