C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 配列について(Visual Studio 2008)


(過去ログ 74 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■43055 / inTopicNo.1)  配列について(Visual Studio 2008)
  
□投稿者/ kita (15回)-(2009/10/28(Wed) 09:21:25)

分類:[VB.NET/VB2005 以降] 

以前VB6を使用していた時は、例えばテキストボックスを10個フォーム上に作ろうとしたコントロール配列というものが使用できました。

Text1(0),Text1(1),Text1(2),Text1(3),Text1(4),Text1(5),Text1(6),Text1(7),Text1(8),Text1(9)

これらのテキストボックスを初期化するには

For i = 0 to 9
Text1(i).text = ""
Next

というように書いてあげれば済んだのですが、Visual Studio 2008 に関してはコントロール配列がないみたいでフォーム上に大量にテキストボックスや
ラベルを使用した場合に簡単にクリアをしたりするいい方法はないのでしょうか?

今現在は一個一個クリアしている状態です。とても効率が悪く面倒くさいです。

是非いい方法があったら教えて下さい。
引用返信 編集キー/
■43056 / inTopicNo.2)  Re[1]: 配列について(Visual Studio 2008)
□投稿者/ とも (8回)-(2009/10/28(Wed) 10:12:15)
No43055 (kita さん) に返信
> 以前VB6を使用していた時は、例えばテキストボックスを10個フォーム上に作ろうとしたコントロール配列というものが使用できました。
>
> Text1(0),Text1(1),Text1(2),Text1(3),Text1(4),Text1(5),Text1(6),Text1(7),Text1(8),Text1(9)
>
> これらのテキストボックスを初期化するには
>
> For i = 0 to 9
> Text1(i).text = ""
> Next
>
> というように書いてあげれば済んだのですが、Visual Studio 2008 に関してはコントロール配列がないみたいでフォーム上に大量にテキストボックスや
> ラベルを使用した場合に簡単にクリアをしたりするいい方法はないのでしょうか?
>
> 今現在は一個一個クリアしている状態です。とても効率が悪く面倒くさいです。
>
> 是非いい方法があったら教えて下さい。

それっぽいことをしてやらんとだめかな。それだけじゃ動かないからそのTextBox自体をコントロール化する。
引用返信 編集キー/
■43060 / inTopicNo.3)  Re[1]: 配列について(Visual Studio 2008)
□投稿者/ ヴァン (29回)-(2009/10/28(Wed) 10:38:54)
こんにちは。

No43055 (kita さん) に返信
> 以前VB6を使用していた時は、例えばテキストボックスを10個フォーム上に作ろうとしたコントロール配列というものが使用できました。
>
> Text1(0),Text1(1),Text1(2),Text1(3),Text1(4),Text1(5),Text1(6),Text1(7),Text1(8),Text1(9)
>
> これらのテキストボックスを初期化するには
>
> For i = 0 to 9
> Text1(i).text = ""
> Next

VB2008ならこんな風にすることもできます。

For Each txt In Me.Controls.OfType(Of TextBox)()
txt.Text = ""
Next

引用返信 編集キー/
■43061 / inTopicNo.4)  Re[1]: 配列について(Visual Studio 2008)
□投稿者/ επιστημη (2233回)-(2009/10/28(Wed) 10:39:30)
επιστημη さんの Web サイト
いろいろテはあるんですけど、ここではTagを使ってみたなり。

たーくさんある TextBox それぞれの Tag プロパティに、たとえば "Group1" をセットしておきます。
ほんでもって:

Public Class Form1

    ' Tag に name がついてるコントロール群を返す
    Private Function SelectControls(ByVal name As String) As IEnumerable(Of Control)
        Dim result As New List(Of Control)
        For Each c As Control In Me.Controls
            ' Tag を String に変換し、
            Dim tag As String = CType(c.Tag, String)
            ' それが name と等しければリストに追加
            If Not tag Is Nothing AndAlso tag = name Then
                result.Add(c)
            End If
        Next
        ' リストを返す
        Return result
    End Function

    ' Button1が押されたら...
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Tag に "Group1" が設定されているコントロールすべてについて
        For Each c As Control In SelectControls("Group1")
            ' その Text をクリアする。
            c.Text = ""
        Next
    End Sub

    ' Button2が押されたら...
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' Tag が "Group2" なものについて以下同文。
        For Each c As Control In SelectControls("Group2")
            c.Text = ""
        Next
    End Sub

End Class

引用返信 編集キー/
■43063 / inTopicNo.5)  Re[2]: 配列について(Visual Studio 2008)
□投稿者/ 魔界の仮面弁士 (1368回)-(2009/10/28(Wed) 10:49:02)
No43061 (επιστημη さん) に返信
> For Each c As Control In Me.Controls

c.Controls にも再帰させた方が良いかも。
引用返信 編集キー/
■43065 / inTopicNo.6)  Re[3]: 配列について(Visual Studio 2008)
□投稿者/ επιστημη (2234回)-(2009/10/28(Wed) 10:58:32)
επιστημη さんの Web サイト
> c.Controls にも再帰させた方が良いかも。

あー。んじゃこんなんでいいんかな。
# VBめったにいぢらんからよぉわかんネーヨ

Public Class Form1

    Private Shared Function SelectControls(ByVal ctls As Control.ControlCollection, ByVal name As String) As IEnumerable(Of Control)
        Dim result As New List(Of Control)
        For Each c As Control In ctls
            If c.HasChildren Then
                result.AddRange(SelectControls(c.Controls, name))
            End If
            Dim tag As String = CType(c.Tag, String)
            If Not tag Is Nothing AndAlso tag = name Then
                result.Add(c)
            End If
        Next
        Return result
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each c As Control In SelectControls(Controls, "Group1")
            c.Text = ""
        Next
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Each c As Control In SelectControls(Controls, "Group2")
            c.Text = ""
        Next
    End Sub

End Class

引用返信 編集キー/
■43067 / inTopicNo.7)  Re[2]: 配列について(Visual Studio 2008)
□投稿者/ なちゃ (335回)-(2009/10/28(Wed) 11:13:09)
こういう時こそPropertyExtenderで。

引用返信 編集キー/
■43069 / inTopicNo.8)  Re[3]: 配列について(Visual Studio 2008)
□投稿者/ なちゃ (336回)-(2009/10/28(Wed) 11:26:14)
> こういう時こそPropertyExtenderで。

ごめんなさい、IExtenderProviderでした…

引用返信 編集キー/
■43078 / inTopicNo.9)  Re[4]: 配列について(Visual Studio 2008)
□投稿者/ kita (16回)-(2009/10/28(Wed) 14:34:32)
No43069 (なちゃ さん) に返信
>>こういう時こそPropertyExtenderで。
>
> ごめんなさい、IExtenderProviderでした…
>

皆様たくさんのアドバイス有難うございました。

解決済み
引用返信 編集キー/
■43079 / inTopicNo.10)  Re[5]: 配列について(Visual Studio 2008)
□投稿者/ επιστημη (2236回)-(2009/10/28(Wed) 15:00:28)
επιστημη さんの Web サイト
> 皆様たくさんのアドバイス有難うございました。

で、結局どうやって解決したんです?

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -