アプリ版:「スタンプのみでお礼する」機能のリリースについて

TextBox1、TextBox2、TextBox3・・・・TextBox10 と10個のテキストボックスにVB6で使っていたコントロール配列と同じような処理の仕方をコードで教えていただけませんか。

for i=0 to 9
TextBox(i).Text=i
next i

上記のコードをVB.NETで書くとすれば、どのように書けばいいかということさえわかれば、なんとか頑張れる気がします。

A 回答 (6件)

VB.NETに「コントロール配列」は無いので、基本的にはできません。



やるとしたら、
「VB6で普通の(コントロール配列でない)コントロールを『コントロール配列』と同じように扱う」
場合と同じです。

つまり・・・
(方法1)自分でコントトール型の配列を宣言し、各コントロールをセットしておく。
(方法2)Controlsコレクションから参照する。
のどちらかでしょう。

前者なら例えば、
-------------------------------------------------------
Private TextBoxArray() As TextBox
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TextBoxArray = New TextBox() {Me.TextBox1, Me.TextBox2, Me.TextBox3}
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
For i = 0 To 2
TextBoxArray(i).Text = i.ToString
Next
End Sub
-------------------------------------------------------
こんな感じ、後者なら、
-------------------------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim i As Integer
For i = 1 To 3
Me.Controls("TextBox" & i.ToString).Text = i.ToString
Next
End Sub
-------------------------------------------------------
こんな感じ。

この回答への補足

具体的なコードを見せていただきましてありがとうございます。
コードを見るとよくわかります。
ところで、前者と後者では、どちらのほうが一般的でしょうか。

補足日時:2007/10/25 00:57
    • good
    • 0
この回答へのお礼

後者のパターンで実行すると
「TextBox1" から型 'Integer' へのキャストが有効ではありません。」というエラーが出ます。

いろいろ調べましたが、なんのことやらさっぱりです・・

お礼日時:2007/10/25 10:19

http://okwave.jp/qa3400887.html

こういうこと?
    • good
    • 0
この回答へのお礼

う~ん・・・どうでしょうか・・
一度コードを貼り付けて実行してみます。
ありがとうございました。

お礼日時:2007/10/25 01:01

質問の答えとは違いますが、下のような事もできますよ。



TextBox1・・・TextBox10 のイベントを1つで管理できます。
Private Sub TextBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
TextBox1.Click, TextBox2.Click, TextBox3.Click, TextBox4.Click, TextBox5.Click, TextBox6.Click, TextBox7.Click, TextBox8.Click, TextBox9.Click, TextBox10.Click

sender.text = sender.name

'でも、下の方がお勧め
DirectCast(sender, TextBox).Text = DirectCast(sender, TextBox).Name

'こちらでもいいか
Dim tb As TextBox
tb = sender
tb.Text = tb.Name
End Sub
    • good
    • 0
この回答へのお礼

最初のパターンは、めんどくさそうですね・・・
DirectCastも調べてみました。なんとなく使いにくそうです。
いろいろ方法があって、勉強になります。
コードを貼り付けて試してみます。

お礼日時:2007/10/25 09:59

> 「TextBox1" から型 'Integer' へのキャストが有効ではありません。

」というエラーが出ます。

しまった。VB.NET2003とかでした?
だったら、後者の方法は使え無かったはず。
申し訳ない。

#VB2005なら使えるはずですが・・・

この回答への補足

こちらのほうこそすみません。.net2003でした・・・
ということは???VB2005では、また仕様が変わっているってことですか???

う~ん・・2005にバージョンアップしたほうがよさそうですね。
検討してみます。

補足日時:2007/10/25 12:35
    • good
    • 0
この回答へのお礼

取り合えず、VB2008Expressをインストールし試したところ、後者の方法で上手く処理できました。

2005にアップグレードするのもあほらしいので、VB2008Expressで試してみることにします。ありがとうございます!

お礼日時:2007/10/25 14:42

> ということは???VB2005では、また仕様が変わっているってことですか???



「変わった」と言うより「追加された」ですね。
VB.NET(VB7.0)やVB.NET2003(VB7.1)は、VB6.0と違いすぎたため、
VB2005(VB8.0)では、VB6.0に近い機能を復活させたり、
新しい便利な機能を追加したりしています。

「Visual Basic の新機能」<==VB2005
http://msdn2.microsoft.com/ja-jp/library/we86c8x …

ついでに、
「Visual Basic 9.0 概要」<==VB208
http://www.microsoft.com/japan/msdn/vs05/vbasic/ …

この回答への補足

テクノロジーだけはどんどん先に進んでいくのでついていくのがしんどいです^^;

ところで、後者のコードの以下の部分ですが、
Me.Controls("TextBox" & i.ToString).Text = i.ToString
これはすべてのコントロールに使えるわけではないようですがどうでしょう?

たとえば、
Me.Controls("CheckBox" & i.ToString).Checked = True
と書いた場合、Checkedはメンバではないとエラーが表示されます。
でも、tag や text は問題ないようです。

チェックボックス自体には、Checkedのプロパティがあって、
CheckBox.Checked では問題ないので不思議です。

補足日時:2007/10/26 09:28
    • good
    • 0

> でも、tag や text は問題ないようです。


> Checkedはメンバではないとエラーが表示されます。
これは、Controlsで求まるのが、各コントロール固有のデータ型ではなく、
基本クラスである「Control クラス」だからです。

> tag や text
は、どのコントロールクラスにも含まれていて、
「Control クラス」のメンバとして定義されているので大丈夫ですが、

> Checked
の様に、固有のコントロール(チェックボックス)用のメンバはエラーになります。

> CType(Me.Controls("CheckBox" & i.ToString), CheckBox).Checked = True
の様に、データ型を「CheckBoxクラス」に変換してみてください。

この回答への補足

何度も質問し、丁寧にお答えいただき感謝いたします。
なんか、面倒くさいですね・・・ 私にとっては、VB6より難解になってます。

教えていただいたコードでうまく操作できました。

なんでもかんでも人に聞くのはあまり好きではないのですが、自力解決しようにも、情報源がまったくありません。dsuekichiさんは、.net以降参考にされた書籍などはありますか?

もしお勧めの書籍などがありましたら、教えていただければうれしいです。

補足日時:2007/10/27 10:17
    • good
    • 0
この回答へのお礼

なんとかがんばってみます。
皆様ありがとうございました。

お礼日時:2007/11/10 15:49

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A