dポイントプレゼントキャンペーン実施中!

初めて質問致します。
よろしくお願い致します。
超初心者レベルです。

VB6の時に、Formにテキストボックスやラベルなどを1つ貼り付け、それをコピーすると「配列にするか?」と聞かれていました。

今、.net 2010 VB でテキストボックス(ラベル)をコピーしても、配列にするかどうか聞いてくれません。

プログラム等ではなく、手動でFormに貼り付け時に、配列にする方法を教えて下さい。
(どのプロパティが、配列のインデックスなのかが分かりません。)


<(__)>

A 回答 (3件)

こんにちは。



>私が配列にこだわるのは、下記のようなことをしたいからです。
>For inti = Text1.LBound To Text1.ubound
>Text1(inti).Text = "TEXT" & CStr(inti)
>Next inti

こんな感じかな。

'配列を定義する
Private Text1 as TextBox()

Form_Loadイベントに

' 新しいインスタンスを生成する
Me.Text1 = New TextBox() {Me.TextBox1,Me.TextBox2,Me.TextBox3,Me.TextBox4....} '←配列に使用する順に追加

For inti as Integer = LBound(Text1) to UBOund(Text1)
Text1(inti).Text = "TEXT" & CStr(inti)
Next
    • good
    • 0
この回答へのお礼

できそうな感じになってきました。

本当にありがとうございます。

お礼日時:2012/12/20 11:29

こんにちは。



vb6の様に使いたいのであれば、

Microsoft.VisualBasic.Compatibility アセンブリを参照設定に加えておいてください。

ツールボックスにて、すべてのWindowsフォーム→右クリック→アイテムの選択→.NETFrameworkコンポーネント内のLabelArrayにチェックを入れてOK。

すべてのWindowsフォームの最終尾にLabelArrayが追加されます。

フォームにドラッグすると、デザイン下にコントロール名:LabelArray1が追加されます。

ツールボックスから、Labelをドラッグします。(コントロール名:Label1)
コントロール名を_LabelArray1_0に変更します。(コントロール名は何でもいいですが。)

ここからは、フォームのデザイナに追加していきます。
_LabelArray1_0にインデックスを付けます。

'_LabelArray1_0
'
Me._LabelArray1_0.AutoSize = True
Me._LabelArray1_0.Location = New System.Drawing.Point(58, 228)
Me._LabelArray1_0.Name = "_LabelArray1_0"
Me._LabelArray1_0.Size = New System.Drawing.Size(80, 12)
Me._LabelArray1_0.TabIndex = 1
Me._LabelArray1_0.Text = "_LabelArray1_0"
Me.LabelArray1.SetIndex(Me._LabelArray1_0, CType(0, Short)) ←ここに追加

が書かれているところに追加します。

フォームのデザインに戻ります。

フォームのLoadに下記記載してLoadしてみます。
ラベルの表示がaaとなればOKです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelArray1(0).Text = "aa"
End Sub

2個目以降追加する場合は、コントロールを張り付けた後にコントロール名を_LabelArray1_1
にして同じくデザイナに、

'_LabelArray1_1
Me.LabelArray1.SetIndex(Me._LabelArray1_1, CType(1, Short))

'LabelArray1_2
Me.LabelArray1.SetIndex(Me._LabelArray1_2, CType(2, Short))

の様にSetIndexを手動で追加していく必要がありますので、
数が多いと大変ですが。。。

この回答への補足

ご回答ありがとうございます。

.net VBでの配列は、無理やり設定するようなものなのですね。

私が配列にこだわるのは、下記のようなことをしたいからです。
.netでは、どのように実現させるのが一般的でしょうか?

重ね重ねよろしくお願い致します。

For inti = Text1.LBound To Text1.ubound
Text1(inti).Text = "TEXT" & CStr(inti)
Next inti

補足日時:2012/12/18 09:25
    • good
    • 0

コントロール配列の機能は.NET Frameworkには存在しません。


というか,Nameプロパティの値はシステムが直接使う物ではなくなっています。

配列であることに依存しない作りにするか,自分でコントロールの配列を作ってしまうか,です。

この回答への補足

ご回答ありがとうございます。

angel_Z さんの補足にも書きましたが、私がやりたいのは次のようなことです。

For inti = Text1.LBound To Text1.ubound
Text1(inti).Text = "TEXT" & CStr(inti)
Next inti


「配列であることに依存しない作りにするか」というのは、次のようなことなのでしょうか?

Text1.Text ="TEXT1"
Text2.Text ="TEXT2"
Text3.Text ="TEXT3"

補足日時:2012/12/18 09:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!