[リストへもどる]
一括表示

投稿時間:2003/05/08(Thu) 00:11
投稿者名:たこ
Eメール:
URL :
タイトル:
textbox1〜10を順に操作したい
はじめまして。たこです。

私がやりたいことをコードで書くと
cnt = 1
do untill cnt > 10
    "textbox" & cnt = cnt & "月"
    cnt = cnt + 1
loop
なのですが、これだとエラーになってしまいます。
for eachでなく、このやり方でやりたいのですが、うまくできません。
どなかたお知恵をかしてください。

よろしくお願いします。

投稿時間:2003/05/08(Thu) 00:13
投稿者名:たこ
Eメール:
URL :
タイトル:
Re: textbox1〜10を順に操作したい
> cnt = 1
> do untill cnt > 10
>     ("textbox" & cnt).text = cnt & "月"
>     cnt = cnt + 1
> loop

でエラーになるのでした。すみません。

投稿時間:2003/05/08(Thu) 00:41
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^2: textbox1〜10を順に操作したい
Controlsコレクションを使って、

> >     ("textbox" & cnt).text = cnt & "月"

Me.Controls("textbox" & cnt).text = cnt & "月"

とすればOKです。

後、ご存知かもしれませんが、コントロール配列というものもあります。
これを使えば、コントロールを配列同様に扱えます。

投稿時間:2003/05/08(Thu) 07:34
投稿者名:たこ
Eメール:
URL :
タイトル:
Re^3: textbox1〜10を順に操作したい
よねKENさん、ありがとうございます。

こうしてみると、質問したのが恥ずかしいくらい単純ですね。
そんなところを見落としていたとは。
とにかく助かりました!

なのですが、
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim start_file As New System.IO.StreamReader("c:\memo\Preset.ini", System.Text.Encoding.Default)
        Dim sf_line As String = start_file.ReadLine()
        Dim cnt_tot_1 As Integer

        'Do Until sf_line Is Nothing
        cnt_tot_1 = cnt_tot_1 + 1
        Me.Controls("TextBox" & cnt_tot_1).Text = sf_line
        sf_line = start_file.ReadLine()
        'Loop
        start_file.Close()
    End Sub

「文字列 "TextBox1" から型 'Integer' へのキャストが有効ではありません。」
のエラーがでてしまいます。これはなぜでしょうか?

投稿時間:2003/05/08(Thu) 10:25
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^4: textbox1〜10を順に操作したい
VBのバージョンが明記されていなかったので、VB6.0以前と仮定して回答してました。
VB.NETでは旧VBとは多くの点で異なっており、今回のご質問に対する回答も変わってきます。
無駄なやり取りを避けるためにも、環境(OSやVBのバージョンなど)は明記するようにしましょう。

> なのですが、
>     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
>         Dim start_file As New System.IO.StreamReader("c:\memo\Preset.ini", System.Text.Encoding.Default)
>         Dim sf_line As String = start_file.ReadLine()
>         Dim cnt_tot_1 As Integer
>
>         'Do Until sf_line Is Nothing
>         cnt_tot_1 = cnt_tot_1 + 1
>         Me.Controls("TextBox" & cnt_tot_1).Text = sf_line
>         sf_line = start_file.ReadLine()
>         'Loop
>         start_file.Close()
>     End Sub
> で
> 「文字列 "TextBox1" から型 'Integer' へのキャストが有効ではありません。」
> のエラーがでてしまいます。これはなぜでしょうか?

.NETのControlsコレクションに名前で該当オブジェクトを引く機能はありません。
また、コントロール配列もありません。

Classの先頭の方に、
Private textBoxes() As TextBox
のような配列変数を宣言しておき、

Form_Loadイベントの先頭で、
textBoxes = New TextBox(){ textBox1,  textBox2,  textBox3,  textBox4,  ・・・ , textBox10}


(上で、「・・・」と記述しているところは、長くなるので省略しているだけです。)
のように記述しておき、textBox1〜textBox10を参照したい場合は、
textBoxes(0)〜textBoxes(9)という形で配列として扱いましょう。

投稿時間:2003/05/08(Thu) 23:08
投稿者名:たこ
Eメール:
URL :
タイトル:
Re^5: textbox1〜10を順に操作したい
こんばんは。

できました!!うれしいです。
vbと.netにそこまで差があるとは思っていませんでした。
基本的にVBのバージョンアップではないんですね。
VBAはそれなりにできるのですが、これともまた全然ちがいますし。

次回から、バージョン情報なども書くようにきをつけます!
ありがとうございました。