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

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

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

Re[4]: Form上にあるコントロールのうち、TextBoxのみ配列化


(過去ログ 92 を表示中)

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

■55288 / inTopicNo.1)  Form上にあるコントロールのうち、TextBoxのみ配列化
  
□投稿者/ クレール (1回)-(2010/11/25(Thu) 15:55:39)

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

(VB2008使用)
WinForm上にあるコントロールのうち、TextBoxだけを配列またはリストのようなものに格納したいのですが、
コード1行で書ける方法はありますか?
なお、このフォーム上にはコンテナはないので、コンテナ上のコントロールを考慮する必要はありません。
引用返信 編集キー/
■55289 / inTopicNo.2)  Re[1]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ ごう (201回)-(2010/11/25(Thu) 16:16:41)
No55288 (クレール さん) に返信
> (VB2008使用)
> WinForm上にあるコントロールのうち、TextBoxだけを配列またはリストのようなものに格納したいのですが、
> コード1行で書ける方法はありますか?
> なお、このフォーム上にはコンテナはないので、コンテナ上のコントロールを考慮する必要はありません。



貴殿の作成しているForm上には、どんなコントロールが存在していてどういう状況なのかが全くわからないのですが・・・

Form上にTextBoxが複数あるのでしょうか?
「コード1行で書ける方法」というのもどのようなことを望んでいるか正確につかめませんが、
もしかして、複数の同じコントロールに同様のことをさせたいということでしょうか?
「コントロール配列」が参考になりませんか?
http://dobon.net/vb/dotnet/control/buttonarray.html


引用返信 編集キー/
■55291 / inTopicNo.3)  Re[2]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ onotchikun (2回)-(2010/11/25(Thu) 16:59:23)
2008ならLinqが使えるので、C#で書くなら

var hoge = Controls.OfType<TextBox>();

です。コンテナは無い、とのことなので。
VBでもほぼ同じコードになると思います。
引用返信 編集キー/
■55292 / inTopicNo.4)  Re[3]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ shu (196回)-(2010/11/25(Thu) 17:33:49)
No55291 (onotchikun さん) に返信
> 2008ならLinqが使えるので、C#で書くなら
>
> var hoge = Controls.OfType<TextBox>();
>
> です。コンテナは無い、とのことなので。
> VBでもほぼ同じコードになると思います。

VB化したものです。(配列にするためにToArrayしてあります。
Dim ctls = Controls.OfType(Of TextBox)().ToArray

同じですが、TypeOf条件でのLinqによるものです。
Dim ctls2 = (From clTmp In Controls Where TypeOf clTmp Is TextBox).ToArray

派生クラスを許さないなら型名で
Dim ctls3 = (From clTmp In Controls Where clTmp.GetType.Name = "TextBox").ToArray


引用返信 編集キー/
■55294 / inTopicNo.5)  Re[4]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ 魔界の仮面弁士 (1957回)-(2010/11/25(Thu) 17:48:36)
No55292 (shu さん) に返信
> 派生クラスを許さないなら型名で
>  Dim ctls3 = (From clTmp In Controls Where clTmp.GetType.Name = "TextBox").ToArray

名前では無く、型そのものを調べるべきかと。

   Dim ctls4 = (From clTmp In Controls Where clTmp.GetType() Is GetType(TextBox)).ToArray()

引用返信 編集キー/
■55299 / inTopicNo.6)  Re[5]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ shu (198回)-(2010/11/25(Thu) 22:30:11)
No55294 (魔界の仮面弁士 さん) に返信
> ■No55292 (shu さん) に返信
>>派生クラスを許さないなら型名で
>> Dim ctls3 = (From clTmp In Controls Where clTmp.GetType.Name = "TextBox").ToArray
>
> 名前では無く、型そのものを調べるべきかと。
>
> Dim ctls4 = (From clTmp In Controls Where clTmp.GetType() Is GetType(TextBox)).ToArray()
確かにこの方がインスタンス比較なので確実ですね。



引用返信 編集キー/
■55302 / inTopicNo.7)  Re[6]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ shu (199回)-(2010/11/25(Thu) 23:33:59)
1行ではないですがこんな書き方はどうでしょう?

    Private m_ctls As New List(Of TextBox)
    Public Sub New()
        AddHandler Me.ControlAdded, AddressOf Me_ControlAdded
        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        RemoveHandler Me.ControlAdded, AddressOf Me_ControlAdded
    End Sub

    Private Sub Me_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs)
        If TypeOf e.Control Is TextBox Then
            m_ctls.Add(e.Control)
        End If
    End Sub



・そういえば中身の順番は大丈夫なのでしょうか?



引用返信 編集キー/
■55304 / inTopicNo.8)  Re[1]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ よねKEN (639回)-(2010/11/26(Fri) 06:25:37)
2010/11/26(Fri) 06:28:53 編集(投稿者)

#特に動的に作りたいという話はでていない…と思ったけれど、なぜかこの案はでていない:-)

No55288 (クレール さん) に返信
> (VB2008使用)
> WinForm上にあるコントロールのうち、TextBoxだけを配列またはリストのようなものに格納したいのですが、
> コード1行で書ける方法はありますか?

FormのLoadイベントで以下のように書けば1行で実現できます。
(インスタンス変数(モジュールレベルの変数)としてTextBoxesというTextBox()型の変数を事前に宣言してあるものとします)

TextBoxes = New TextBox() { TextBox1, TextBox2, TextBox3, ... }

のような感じです。
※...の部分は省略しています。実際に配置してあるTextBoxをずらずら並べてください。
※どんなテキストボックスが配置してあるのか把握できないほど複雑なフォームなら、他の方の案を参考にしてください。
引用返信 編集キー/
■55311 / inTopicNo.9)  Re[2]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ shu (201回)-(2010/11/26(Fri) 12:25:01)
No55304 (よねKEN さん) に返信
> 2010/11/26(Fri) 06:28:53 編集(投稿者)
>
> #特に動的に作りたいという話はでていない…と思ったけれど、なぜかこの案はでていない:-)
>
> ・・・・・
>
> TextBoxes = New TextBox() { TextBox1, TextBox2, TextBox3, ... }
>
私は『コード1行で』というところに既にこの方法は試しておりかなり多いコントロールがあるのかなと
想像しました。書けるのならこの方法が一番処理が軽いかなとは思います。
引用返信 編集キー/
■55313 / inTopicNo.10)  Re[3]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ クレール (2回)-(2010/11/26(Fri) 14:17:01)
みなさま、ありがとうございました。
魔界の仮面弁士さんのご回答が、まさに希望していたものそのものでした。

Dim ctls4 = (From clTmp In Controls Where clTmp.GetType() Is GetType(TextBox)).ToArray()

(実際には、最後のToArrayの代わりにToListにしてリストとして使用する方向です。)
ありがとうございました。
解決済み
引用返信 編集キー/
■55314 / inTopicNo.11)  Re[4]: Form上にあるコントロールのうち、TextBoxのみ配列化
□投稿者/ shu (202回)-(2010/11/26(Fri) 14:36:10)
2010/11/26(Fri) 14:36:53 編集(投稿者)

No55313 (クレール さん) に返信
> みなさま、ありがとうございました。
> 魔界の仮面弁士さんのご回答が、まさに希望していたものそのものでした。
>
> Dim ctls4 = (From clTmp In Controls Where clTmp.GetType() Is GetType(TextBox)).ToArray()
>
> (実際には、最後のToArrayの代わりにToListにしてリストとして使用する方向です。)
> ありがとうございました。
これはTextBoxから派生したコントロールを含めない場合ですが、本当に大丈夫ですか?

回答者の疑問にいくつか答えてないのですが解決でいいのでしょうか?
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -